2014-12-15 16 views
8

Ich bekomme eine java.lang.NullPointerException beim Aufruf ResultSet.getDate() im folgenden Code. Der Eintrag in der Datenbank scheint jedoch nicht null zu sein. Die Verbindung scheint aktiv zu sein, da andere Felder abgerufen werden. Was mache ich falsch?NullPointerException beim Aufruf von ResultSet.getDate()

try { 
    ... /* Code that creates a connection and initializes statement */ 

    String query = "SELECT * FROM groups WHERE id = 'testGroup1'"; 
    ResultSet rs = statement.executeQuery(query); 
    if(rs.next()) { 
     admin = rs.getString("admin_id"); 
     User.process(admin); 
     java.sql.Date created_on = rs.getDate("created_on"); 
     System.out.println("Created on = " + created_on.toString()); 
    } 
} 
catch(Exception e) { 
    System.out.println("Stuck here"); 
    e.printStackTrace(); 
} 

Hier ist der Ausgang und der Stack-Trace:

Admin id = 42   // User.process prints the admin id 
Stuck here 
java.lang.NullPointerException 
    at com.mysql.jdbc.ResultSet.findColumn(ResultSet.java:966) 
    at com.mysql.jdbc.ResultSet.getDate(ResultSet.java:1988) 
    at com.myapp.server.model.Group.initInfo(Group.java:39) 
    ... 

Ich habe folgendes Schema:

+-------------------+--------------+------+-----+---------+-------+ 
| Field    | Type   | Null | Key | Default | Extra | 
+-------------------+--------------+------+-----+---------+-------+ 
| id    | varchar(50) | NO | PRI | NULL |  | 
| admin_id   | varchar(50) | NO | MUL | NULL |  | 
| created_on  | datetime  | NO |  | NULL |  | 
+-------------------+--------------+------+-----+---------+-------+ 

Und den folgenden Eintrag in der Datenbank:

+------------+----------+---------------------+ 
| id   | admin_id | created_on   | 
+------------+----------+---------------------+ 
| testGroup1 | 42  | 2014-12-15 22:46:31 | 
+------------+----------+---------------------+ 
+2

Könnten Sie versuchen rs.getTimestamp(); –

+0

Ich denke, das Problem wird mit dem SQL-Datumsformat sein. Ist der 'datetime' ein richtiger Datentyp, auf den Sie sich beziehen? Probieren Sie stattdessen "Date". –

+0

@SemihEker 'getTimestamp()' wirft auch 'NullPointerException'. –

Antwort

3

Wie in diesen question erwähnt, könnten Sie versuchen, wie das STHG;

Ich nehme den Code auch von der Frage, die ich oben erwähnt.

Timestamp timestamp = resultSet.getTimestamp(i); 
if (timestamp != null) 
    date = new java.util.Date(timestamp.getTime())); 
+0

' getTimestamp() 'gibt auch den gleichen Fehler, wie ich im Kommentar erwähnt. Eine 'NullPointerException' auf' rs.getTimestamp ("created_on") '. –

+0

Sie sagten, "Wie @SemiEKer vorgeschlagen, getTimestamp() gibt mir schließlich das gewünschte Ergebnis.". Ist diese Antwort für dich in Ordnung? –

+0

Ja, sobald ich die NPE los werde. [Der Fehler] (http://stackoverflow.com/a/27490261/1492578) war in der 'User.process' Funktion. Vielen Dank. –

3

Der Typ des Felds created_on in Ihrer Datenbank datetime ist, ist dies nicht das gleiche wie die Java Date

Sie werden es konvertieren.

Wenn Sie bei der ersten Antwort Blick auf diesen question Sie werden sehen, wie es zu beheben

+0

Danke für den Link. Die Verwendung von 'getTimestamp()' gibt mir das gewünschte Ergebnis, sobald ich die 'NullPointerException' losgeworden bin. –

+0

Die Umwandlung von einem 'datetime' (entspricht einem Zeitstempel) erfolgt automatisch und benötigt durch die JDBC-Spezifikation (es wird einfach die Zeit fallen) –

2

I gefunden User.process abgefragt weiter die Datenbank dadurch den Strom ResultSet Schließen (oder so spekulieren I). Die NullPointerException geht weg, wenn ich folgendes tun:

try { 
    ... 
    if(rs.next()) { 
     admin = rs.getString("admin_id"); 
     java.sql.Timestamp created_on = rs.getTimestamp("created_on"); 
     User.process(admin); 
    } 
} 
catch(Exception e) { 
    ... 
} 

Auch getTimestamp() Verwendung durch andere Lösungen bringt mich um das gewünschte Ergebnis vorgeschlagen.

Verwandte Themen