2016-12-20 3 views
1

Ich kompilierte dies, aber dieser Code tritt java.sql.SQLException und java.text.ParseException bei resultSet.getDate() -Methode.SQL-Abfrage für SQLite/java.text.ParseException: Nicht übertragbares Datum

import java.sql.Connection; 
import java.sql.Date; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

class Main { 
    public static void main(String[] args) throws SQLException { 
     try { 
      Class.forName("org.sqlite.JDBC"); 

      Connection connection = DriverManager.getConnection 
      ("jdbc:sqlite:C:/sqlite-tools/test.db"); 

      Statement statement = connection.createStatement(); 

      String sql = "CREATE TABLE t1 (" + 
         "no INTEGER PRIMARY KEY, " + 
         "date DATE, " + 
         "content TEXT)"; 
      statement.executeUpdate(sql); 

      sql = "INSERT INTO t1 (date, content)" + 
        "VALUES(DATETIME('NOW', 'LOCALTIME'), 'test');"; 
      statement.executeUpdate(sql); 

      ResultSet resultSet = statement.executeQuery("SELECT * FROM t1;"); 
      while(resultSet.next()) { 
       // here occurs exception ↓ :(
       Date date = resultSet.getDate("date"); 
       // here occurs exception ↑ :(
       String text = resultSet.getString("content"); 

       System.out.println(date + " " + text); 
      } 

      statement.close(); 
      connection.close(); 
     } catch(ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Ausnahme Erklärung ist dies.

Exception in thread "main" java.sql.SQLException: Error parsing time stamp 
at org.sqlite.jdbc3.JDBC3ResultSet.getDate(JDBC3ResultSet.java:327) 
at org.sqlite.jdbc3.JDBC3ResultSet.getDate(JDBC3ResultSet.java:346) 
at com.planb.main.Main.main(Main.java:35) 
Caused by: java.text.ParseException: Unparseable date: "2016-12-20 17:08:07" does not match (\p{Nd}++)\Q-\E(\p{Nd}++)\Q-\E(\p{Nd}++)\Q \E(\p{Nd}++)\Q:\E(\p{Nd}++)\Q:\E(\p{Nd}++)\Q.\E(\p{Nd}++) 
at org.sqlite.date.FastDateParser.parse(FastDateParser.java:299) 
at org.sqlite.date.FastDateFormat.parse(FastDateFormat.java:490) 
at org.sqlite.jdbc3.JDBC3ResultSet.getDate(JDBC3ResultSet.java:324) 
... 2 more 

Ich kann keine Lösungen für zwei Stunden finden. Hilf mir bitte. :(

+0

Sie einen vollständigen Zeitstempel mit der Zeit bekommen und so weiter, aber Sie möchten einen Termin mit tt/mm/jjjj – XtremeBaumer

+0

@ 조민규, das ist nicht konstruktiv. Ich war der erste, der die richtige Antwort gab, aber ich wurde abgelehnt. Der Typ, der seine Antwort auf meine stützte, wurde aufgewertet. – Nurjan

Antwort

0

Als @Nurzhan vorgeschlagen, müssen Sie das Datumsformat definieren, und dann verwenden Sie das Datum als String von resultSet zu analysieren Ein Beispiel:.

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
while(resultSet.next()) { 
    Date date = formatter.parse(resultSet.getString("date")); 
    String text = resultSet.getString("content"); 

    System.out.println(date + " " + text); 
} 

Ausgang wird sein:

Di 20. Dezember 11.24.40 EET 2016 Test

+0

Vielen Dank. Ich habe diesen Fehler mit Ihrem Code behoben. Ich konnte nicht an getString() -Methode für DATE-Typ denken. –

+0

Das liegt daran, dass 'parse' eine' parse (String source) Signatur hat. Und Sie müssen eine Zeichenfolge als Parameter übergeben. – DimaSan

+0

Sehr schön. Die Lösung basiert auf meiner Antwort, jedoch wurde ich mehrmals abgelehnt. – Nurjan

Verwandte Themen