zoukankan      html  css  js  c++  java
  • 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);
        }

    查询数据

        @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);
        }
  • 相关阅读:
    RHEL5.8配置开机自动挂载磁盘
    RHEL5.8配置NFS服务
    Linux环境下Oracle数据库启动停止命令
    使用的组件:Layui
    使用的组件:Jcrop
    使用的组件:ckeditor
    使用的组件:Web Uploader
    WebSphere试用过期问题处理
    webpack学习笔记(一)
    如何用node命令和webpack命令传递参数 转载
  • 原文地址:https://www.cnblogs.com/SmilingEye/p/12031523.html
Copyright © 2011-2022 走看看