Witam. Chciałem napisać program korzystający z JDBC, jednak napotkałem na drobny problem. Na początku chciałbym zapytać czy w prawidłowy sposób dodałem sterownik JDBC do Eclipsa i czy nie trzeba robić innych czynności?
Stworzyłem projekt potem kliknąłem na niego ppm -> wybrałem properties -> Java Build Path -> Libraries -> Add External JARs i znalazłem ścieżkę gdzie znajduje się JDBC6.jar
Czy tyle należało wykonać?
Niby udaje mi się połączyć z bazą:
private void connect(String server, String port, String login, String haslo) {
String database = "XE";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String connectionString = "jdbc:oracle:thin:@" + server + ":" + port + ":" + database;
con = DriverManager.getConnection(connectionString, login, haslo);
if (con != null) {
connected = true;
}
} catch (SQLException s) {
JOptionPane.showMessageDialog(null, "Blad sql " + s.getErrorCode() + "" + s.getSQLState() + " " + s.getMessage(), "Błąd", JOptionPane.ERROR_MESSAGE);
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "Blad:" + e1, "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
Nic nie wywala, a jak dodam
System.out.println("Połączono");
pod fragment: if (con != null) {
connected = true;
}
to go wyświetla. Więc wygląda, że wszystko przebiegło pomyślnie.
Problem napotykam w momencie gdy chcę wykonać pewną metodę. Mam klasę BazaDanych a w niej taką metodę:
```java
ArrayList<Telewizor> listaTV() {
tvl.clear();
try {
this.rs = this.stmt.executeQuery("SELECT * FROM Telewizory");
while (this.rs.next()) {
tv = new Telewizor(Integer.parseInt(rs.getString(1)), rs.getString(2), rs.getString(3), (int) Integer.parseInt(rs.getString(4)), rs.getString(5), (int) Integer.parseInt(rs.getString(6)), rs.getString(7), rs.getString(8), (int) Integer.parseInt(rs.getString(9)), rs.getString(10), rs.getString(11));
tvl.add(tv);
}
} catch (Exception e) {
e.printStackTrace();
}
for(Telewizor x : tvl) {
System.out.println(x);
}
return tvl;
}
Metoda ta ma zwracać jakąś tam listę telewizorów. Wywołuję ją w klasie głównej programu TVSet:
BazaDanych bb = new BazaDanych("localhost", "1521", "System", "asdfghj");
bb.listaTV();
Jednak wywala mi następujące błędy:
java.lang.NullPointerException
at BazaDanych.listaTV(BazaDanych.java:109)
at TVSet.<init>(TVSet.java:66)
at TVSet$1.run(TVSet.java:51)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Czy mógłby mi ktoś wyjaśnić czemu tak się dzieje? Podobne zapytania kiedyś wykonywałem za pomocą Netbeansa i działało. Gdzie tutaj popełniłem błąd?