Eclipse i JDBC

0

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?

0

o_O masz nullpointerexception! Znaczy że wywołujesz metodę na czymś co jest nullem! Podepnij się do tej metody debugerem i zobacz gdzie masz tego nulla!

0

tvl gdzieś stworzyłeś czy tylko zadeklarowałeś? W przyszłości zaznaczaj w kodzie wiersz, który wygenerował błąd.

0

Linijka, która generuje błąd to:

this.rs = this.stmt.executeQuery("SELECT * FROM Telewizory");
    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;
    }

tvl jest zadeklarowane i zainicjalizowane wcześniej

public class BazaDanych {

    private boolean connected = false;
    private String server;
    private String port;
    private Connection con = null;
    private String login;
    private String haslo;
    private ResultSet rs = null;
    private Statement stmt = null;
    private Telewizor tv;
    ArrayList<Telewizor> tvl = new ArrayList<Telewizor>() <------------------------; 
0

o rly?

private Statement stmt = null;
//
this.stmt.executeQuery

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0