1.問題
sqlite數據庫
user表,create_time字段,類型DATETIME,設置默認值datetime('now')
mybatis,User實體,createTime類型為java.util.Date
插入一條數據
@Test @Transactional @Rollback(false) public void insert(){ User user = new User(); user.setId("3"); user.setUsername("user1"); user.setName("王五"); user.setAge(18); userService.insert(user); }
查詢數據
@Test public void get(){ try{ List<User> list = userService.get(); for(User user : list){ System.err.println(user); } }catch(Exception e){ e.printStackTrace(); } }
拋出異常
Caused by: java.text.ParseException: Unparseable date: "2019-12-12 12:08:26" 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.getTimestamp(JDBC3ResultSet.java:540) ... 77 more
2.解決問題
方法1(推薦):將url字符串修改如下
url: jdbc:sqlite:dataserver.pak?date_string_format=yyyy-MM-dd HH:mm:ss
方法2:將create_time字段默認值改為strftime('%s','now'),類型改為bigint,java類型改為Long,需要轉Date再做轉換
strftime('%s','now'),從1970年1月1日到現在的秒數
方法3:或者strftime('%Y-%m-%d %H:%M:%f','now')
3.sqlite獲取當前時間
3.1獲取當前時間:
select datetime('now')
結果:2017-04-12 09:47:12
3.2如果需要精確到毫秒,使用:
select strftime('%Y-%m-%d %H:%M:%f','now')
結果:2017-04-12 17:48:35.890
3.3獲取從1970年1月1日到現在的秒數(Unix時間戳):
select strftime('%s','now')
結果:1491985972
4.原理
sqlite將字符串轉換為Date使用FastDateFormat轉換
等同於下面代碼
@Test public void test() throws ParseException{ FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.SSS"); Date d = dateFormat.parse("2019-12-12 19:26:55"); System.err.println(d); }