==我使用的是把sqlite版本替换为sqlite-jdbc-3.7.2 解决 ==
下文转载:
http://blog.sina.com.cn/s/blog_667ac0360102w0nz.html
使用标准JDBC接口查询日期时间类型datetime会出现各种问题!查询语句如下:
ResultSet rs = stmt.executeQuery(“SELECT id, name, createTime FROM employee”);
System.out.println("createTime = " + rs.getTimestamp(“createTime”));
测试发现:
使用sqlite-jdbc-3.7.2.jar时,查询结果是“1970-01-01 08:00:02.015”;
使用sqlite-jdbc-3.8.11.2.jar时,抛异常java.sql.SQLException: Error parsing time stamp;
看了下两个版本的源码,发现sqlite-jdbc的3.8与3.7的代码完全不一样,是被重写过了!
下载地址:https://bitbucket.org/xerial/sqlite-jdbc/downloads
解决办法:
采用最新版本sqlite-jdbc-3.8.11.2.jar,然后
Class.forName(“org.sqlite.JDBC”);
Properties pro = new Properties();
pro.put(“date_string_format”, “yyyy-MM-dd HH:mm:ss”); //默认是yyyy-MM-dd HH:mm:ss.SSS,覆盖为yyyy-MM-dd HH:mm:ss;
c = DriverManager.getConnection(“jdbc:sqlite:c:/db/test.db”, pro);
这时候,调用JDBC查询是正常的!
如果使用了spring,可以通过dataSource的参数注入,来配置Connection的参数!这里使用了com.alibaba.druid.pool.DruidDataSource数据源,可以注入一个connectProperties属性,类型是Properties,键是date_string_format,值是yyyy-MM-dd HH:mm:ss;
这样就能解决datetime查询的问题了!
iPan
2015-10-09
以上是可以解决,查询数据库的datetime类型能正常显示;但是,发现调用JDBC的PreparedStatement来设置Date类型时候,写入的格式不对,使用数据库工具无法正常查看;但是再通过JDBC查询是能够正常显示的!
最终,使用最直接的解决方案,屏蔽使用datetime类型!使用varchar来取代!
iPan
2015-10-10