2017-11-17 949 views
0

我嘗試從SQLite數據庫檢索數據時出現錯誤。來自SQLite的Java數據解析錯誤

enter image description here

它檢索數據的第一行到表,但是當該日期是有它給出以下所示的錯誤。

這是我得到錯誤的代碼。

try { 
     con = DriverManager.getConnection("jdbc:sqlite:Rooms.db"); 
     con.setAutoCommit(false); 

     pst = con.prepareStatement("Select * from Standard"); 
     rs = pst.executeQuery(); 


     while (rs.next()) 
     { 
      LocalDate sD = null; 
      LocalDate eD = null; 
      if (rs.getDate(6) != null) 
      { 
       sD = Conv(rs.getDate(6)); 
       eD = Conv(rs.getDate(7)); 
       System.out.println(sD + " " + eD); 

       if (chkIn.getValue().isBefore(sD) == true && chkOut.getValue().isBefore(eD) == true) 
       { 
        datas.add(new StandardRoomList(rs.getString(1), rs.getString(2) , "£" + (rs.getInt(3)*pri), "" + rs.getInt(4))); 
       } 

      } 

這是我收到的錯誤:

Caused by: java.text.ParseException: Unparseable date: "2017-11-17" 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:293) 
... 64 more 

回答

1

錯誤消息的模式意味着JDBC驅動程序期望的格式爲「YYYY-MM-DD HH的字符串:MM: SS.milliseconds」。這與數據庫中的日期表示不兼容。

這裏的根本問題是,SQLite不支持的日期/時間/時間戳類型:

您似乎已編碼的日期爲你的數據庫字符串,它似乎JDBC驅動程序試圖使用內置啓發式將這些字符串值轉換爲日期/時間值。但那是失敗的。

我建議使用getString從結果集中檢索值,然後使用Java的內置日期/時間類顯式地執行字符串 - >日期轉換。

另一種方法是使用org.sqlite.SQLiteConfig對象更改JDBC驅動程序的默認日期時間格式。但是,除了源代碼之外,我找不到這種方法的任何文檔!