resultSet.next() restituisce il puntatore eccezione

Sto lavorando in java utilizzando JDBC per eseguire query su un database. Per qualche ragione, questo codice:

public static void checkAllFlights() {
    String SQLStatement = "SELECT Flight.FlightID,"
                            +"(CASE WHEN (SUM(NumSeats) > 0) THEN SUM(NumSeats) ELSE 0 END)"
                            +"AS Booked_Seats,"
                            +"(CASE WHEN (MaxCapacity-SUM(NumSeats) > 0) THEN MaxCapacity-SUM(NumSeats) ELSE MaxCapacity END) AS Available_Seats,"
                            +"MaxCapacity"
                            +"FROM Flight LEFT JOIN FlightBooking ON Flight.FlightID = FlightBooking.FlightID"
                            +"GROUP BY Flight.FlightID, Flight.MaxCapacity"
                            +"ORDER BY Flight.FlightID";

    try {
        dbAccess.getConnection();
        ResultSet resultSet = dbAccess.runSimpleQuery(SQLStatement);
        System.out.println("FlightID "+"Booked_Seats "+"Available_Seats "+"Max_Capacity");      
        while (resultSet.next()) {
            int ID = resultSet.getInt(1);
            System.out.println(ID);
        }
        DBAccess.disconnect();
    } catch (Exception e) {
        e.printStackTrace(System.err);
    } 
}

sta gettando me l’errore:

java.lang.NullPointerException
        at databases2.Databases2.checkAllFlights(Databases2.java:245)
        at databases2.Databases2.main(Databases2.java:26)

(linea “245” si riferisce alla “mentre (resultSet.next())”)

resultSet.next() e di risultati.close() su di loro, inoltre, produrre lo stesso errore.

Ho usato essenzialmente lo stesso codice, in seguito, il ciclo di più di un gruppo di risultati e ha funzionato bene e ho eseguito il SQL direttamente e che restituisce i risultati corretti quindi sono confusa sul motivo per cui il gruppo di risultati.next() potrebbe essere il lancio di un puntatore null eccezione?

Il runSimpleQuery metodo:

public ResultSet runSimpleQuery(String sql)
        throws Exception {

    try {
        //Create a statement variable to be used for the sql query
        statement = connection.createStatement();

        //Perform the update
        return statement.executeQuery(sql);
    } catch (SQLException e) {
        //Problem encountered
        statement = null;
        return null;
    }

Aggiornamento: Dopo essere passato attraverso di essa, sembra che runSimpleQuery restituisce null, il che è qualcosa che non dovrebbe fare, a meno che un’eccezione sql è buttare….

Aggiornamento: Risolto. Mentre la query è giusta, a quanto pare ho incasinato la mia concatenazione della stringa in modo che non include spazi dove dovrebbe e ha funzionato quando il test perché sono stato un idiota e testato la query con il copia-incolla del codice piuttosto che tirando l’effettiva variabile al di fuori del debugger….

  • Puoi postare runSimpleQuery metodo?
  • Potrai anche voler controllare getConnection() per garantire il corretto credenziali
  • da qualsiasi codice che hai messo , sembra che dbAccess.runSimpleQuery(SQLStatement); è il ritorno null..
  • Probabilmente resultSet è null… Potrebbe essere che runSimpleQuery restituisce null se non viene trovato alcun record per il ritorno. Sarebbe sciatto, ma che potrebbe essere la radice del problema.
  • eseguire il SQLStatement query nel Database e vedere se qualsiasi risultato che ne viene fuori…
  • l’istruzione sql viene eseguito correttamente.
  • Hai controllato oggetto di connessione? è il ritorno di collegamento corretto ? potrebbe essere possibile che la connessione è nullo..e lo prese in blocco catch e ritorno null
  • Sì, sembra essere e funziona altrove.
  • Si dovrebbe eseguire il debug .. da la stampa l’eccezione nel blocco catch ..in modo che si può venire a sapere il motivo esatto per questo null
  • Sì, appena fatto. A quanto pare ho incasinato la mia concatenazione della stringa in modo che non include spazi dove dovrebbe e ha funzionato quando il test perché sono stato un idiota e testato la query con il copia-incolla del codice piuttosto che tirando l’effettiva variabile al di fuori del debugger….
  • Grazie per il vostro aiuto. Se vuoi pubblicare un tuo commento come una risposta poi ti segna come accettato.
  • Sì l’ho fatto..E più di tutto sono contento che sia risolto il tuo problema..:)

InformationsquelleAutor The General | 2013-03-30



3 Replies
  1. 1

    Hai controllato connection oggetto? è la restituzione di una corretta connection ? potrebbe essere possibile che la connessione è null..e lo prese in catch block e restituire null. Si dovrebbe eseguire il debug .. da la stampa del exception in blocco catch ..in modo che si può venire a sapere il motivo esatto per questo null

  2. 3

    Mi sono imbattuto nello stesso problema e ho scoperto che se altri thread utilizza la stessa connessione ResultSet lancerà una NullPointerException dopo l’altro sql viene eseguito.

    sys.scheduler 06:28:00,017 [SchedulerReloader] ERROR - java.lang.NullPointerException
    sys.scheduler 06:28:00,018 [SchedulerReloader] ERROR - com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:7009)

    Il mio processo è un lungo processo in esecuzione con 200k righe… io uso una connessione particolare, per questa e per gettarlo dopo il processo è fatto.

  3. 1

    Eseguire il Debug runSimpleQuery metodo restituisce null, ecco perché il gruppo di risultati.getNext() throw NullPointerException

Lascia un commento