java - 用于SQLite/java.text.ParseException的SQL查询:无法解析的日期

标签 java sqlite

我对此进行了编译,但是此代码在resultSet.getDate()方法中发生java.sql.SQLException和java.text.ParseException。

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();
        }
    }
}


异常的说明是这个。

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


我两个小时找不到任何解决方案。请帮帮我。 :(

最佳答案

正如@Nurzhan所建议的,您必须定义日期格式,然后使用它来将日期解析为String中的resultSet。一个例子:

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);
}


输出将是:


EET 2016年12月20日星期二11:24:40测试

关于java - 用于SQLite/java.text.ParseException的SQL查询:无法解析的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41237677/

相关文章:

iphone - 在 iOS 中如何输出我的 sqlite3 数据库表结构?

java - 多维数组行到单数组java

java - java 如何删除指向数组中元素的指针

java - PSYoungGen是否有初始空间,为什么没有创建实例,但使用了一些空间?

java - 设置哪个权限,以避免使用 https-URLS 的安全管理器出错?

java - SQLite 文件打开器 Android Studio

android - 如何在android中查找SQLite数据库的最后更新时间

ios - 当我在 iOS 上尝试 SQLite 时,INSERT 和 UPDATE 不起作用

c - 如何使用 SQLite3 C 接口(interface)将 CSV 文件加载到主内存数据库中?

java - SWT Layout 重新定位表单控件