来自SQLite的Java数据分析错误

来自SQLite的Java数据分析错误,java,sqlite,date,resultset,Java,Sqlite,Date,Resultset,尝试从SQLite数据库检索数据时出错 它检索表中的第一行数据,但当有日期时,它会给出如下所示的错误 这是我得到错误的代码 try { con = DriverManager.getConnection("jdbc:sqlite:Rooms.db"); con.setAutoCommit(false); pst = con.prepareStatement("Select * from Standard"); rs = pst.

尝试从SQLite数据库检索数据时出错

它检索表中的第一行数据,但当有日期时,它会给出如下所示的错误

这是我得到错误的代码

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

错误消息中的模式表示JDBC驱动程序需要一个格式为“YYYY-MM-DD HH:MM:SS.millizes”的字符串。这与数据库中的日期表示形式不兼容

这里的基本问题是SQLite不支持日期/时间/时间戳类型:

您似乎已经在数据库中将日期编码为字符串,而且JDBC驱动程序似乎正在尝试使用内置的启发式方法将这些字符串值转换为日期/时间值。但这是失败的

我建议使用getString从结果集中检索值,然后使用Java内置的日期/时间类显式地执行string->date转换

另一种方法是使用
org.sqlite.SQLiteConfig
对象更改JDBC驱动程序的默认日期时间格式。但是,我找不到任何关于这种方法的文档。。。除了源代码