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:将create_time字段默认值改为strftime('%s','now')
建议使用这种方式,因为如果从java里插入时间数据,将会插入数字(1970年1月1日到现在的秒数)
@Test
@Transactional
@Rollback(false)
public void insert(){
User user = new User();
user.setId("5");
user.setUsername("user1");
user.setName("王五");
user.setAge(18);
user.setCreateTime(new Date(100000000000L));
userService.insert(user);
}

方法2:或者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);
}
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!