mybatis-sqlite日期类型对应关系

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

mybatis-sqlite日期类型对应关系

查询数据

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

mybatis-sqlite日期类型对应关系

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

 

 

上一篇:windows下使用VS2015编译V8 JavaScript引擎(v5.5 - 2016/09)


下一篇:CodeForces 993A Two Squares(数学 几何)