2017-11-17 3 views
0

SQLiteデータベースからデータを取得しようとするとエラーが発生します。SQLiteのJava dataparseエラー

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の組み込み日付/時刻クラスを使用して明示的に文字列 - >日付変換を行うことをお勧めします。

もう1つの方法は、org.sqlite.SQLiteConfigオブジェクトを使用してJDBCドライバのデフォルトの日付/時刻形式を変更することです。しかし、私はこのアプローチのためのドキュメントを見つけることができません...ソースコードとは別に!