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();
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:)
at org.sqlite.date.FastDateFormat.parse(FastDateFormat.java:)
at org.sqlite.jdbc3.JDBC3ResultSet.getTimestamp(JDBC3ResultSet.java:)
... more

2.解决问题

方法1:将create_time字段默认值改为strftime('%s','now')

建议使用这种方式,因为如果从java里插入时间数据,将会插入数字(对象表示的自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数)

strftime('%s','now'),从1970年1月1日到现在的秒数

一个秒数,一个毫秒数

    @Test
@Transactional
@Rollback(false)
public void insert(){
User user = new User();
user.setId("");
user.setUsername("user1");
user.setName("王五");
user.setAge();
user.setCreateTime(new Date(100000000000L));
userService.insert(user);
}

方法2:或者strftime('%Y-%m-%d %H:%M:%f','now')

方法3:将实体User的字段createTime改为字符串

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

mybatis-sqlite日期类型对应关系的更多相关文章

  1. mybatis 插入日期类型精确到秒的有关问题

    mybatis 插入日期类型精确到秒的问题 Mybatis 插入 数据库是为了防止插入空时报错, Mybatis 提供了一套机制,只要给定插入的字段的类型,如果为空,则它会自动处理为相应类型的默认值: ...

  2. Android sqlite日期存储

    SQLite日期类型是以TEXT.REAL和INTEGER类型分别不同的格式表示的,对应如下:TEXT: "YYYY-MM-DD HH:MM:SS.SSS"REAL: 以Julia ...

  3. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. mybatis查询日期时间数据得到long类型数据的问题

    使用mybatis查询数据时,如果数据库存储的是timestamp.datetime.date.time等时间类型,而Java bean也使用的是date类型,mybatis会自动将date类型转换为 ...

  5. LocalDateTime与mysql日期类型的交互(基于mybatis)

    众所周知,在实体Entity里面,可以使用Java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.datetime等 ...

  6. Mybatis 向MySql数据库插入带有日期类型字段的数据

    我们的实体类里面一个字段的日期类型是util.Date,在向数据库插入该实体时会报错,说是 日期哪个字段 Data truncation.所以需要做些更改在mybatis的MAPPER映射文件中对插入 ...

  7. mybatis 自定义类型转换器 (后台日期类型插入数据库)

    后台日期类型插入数据库 有以下几种发法: 1 调用数据库 日期字符串转日期函数 str_to_date("日期","yyyy-MM-dd HH:mm:ss") ...

  8. MyBatis jdbcType常用类型

    MyBatis jdbcType常用类型 jdbcType与javaType对应关系 javaType jdbctype CHAR String VARCHAR String LONGVARCHAR ...

  9. SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法

    使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java ...

随机推荐

  1. Cookie 和 Session 总结

    Cookie 和 Session 区别 cookie数据存放在客户的浏览器上,session数据放在服务器上 cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑* ...

  2. DHCP服务器的架设

    DHCP服务器的架设 一.DHCP服务器的安装要求: 搭建DHCP服务器需要一些必备条件支持,主要有以下方面: 需要一台运行Windows Server系统的服务器,并为其指定静态IP地址. 根据子网 ...

  3. Ajax + PHP 的用法以及遇见的问题

    由于自己是个php小白,所以新知识点都要自己去不断的试验和摸索. 分享下自己用php + ajax交互的用法和问题. 前端代码: $.ajax({ type: "POST", da ...

  4. JAVA - Windows下JDK默认安装的配置参数

    JDK版本1.8 JAVA_HOME C:\Program Files\Java\jdk1.8.0_60 CLASSPATH .;%%JAVA_HOME%%\lib;%%JAVA_HOME%%\lib ...

  5. ROMTableAddr = 0xE00FF003 错误 Target DLL has been cancelled 错误

    JTAG下载固件错误 keil下载固件错误 如下错误 * JLink Info: Found SWD-DP with ID 0x1BA01477 * JLink Info: Found SWD-DP ...

  6. 三步操作gitHub汉化插件安装--谷歌浏览器

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 一个好用基于chrome的插件,用来汉化gitHub,大致效果图如下: 步骤一: 首先下载谷歌 ...

  7. Python学习日记(四) 集合和元祖

    元祖的特性:是一个只读列表.可以循环.可以切片,修改数据遵循'儿子'不能改但'孙子'可能可以改. iterable:可迭代对象(元祖.列表.字串.集合) 元祖宣告方式: tu = (1,2,3,['a ...

  8. nginx 是如何分配 worker 进程连接数的

    客户端连接过来后,多个空闲的进程,会竞争这个连接,很容易看到,这种竞争会导致不公平,如果某个进程得到 accept 的机会比较多,它的空闲连接很快就用完了,如果不提前做一些控制,当 accept 到一 ...

  9. APC (Asynchronous Procedure Call)

    系统创建新线程时,会同时创建与这个线程相关联的队列,即异步过程调用(APC)的队列. 一些异步操作可以通过加入APC来实现,比如我现在学习的IO请求/完成. BOOL ReadFileEx( HAND ...

  10. 16、Real-time Personalization using Embeddings for Search Ranking at Airbnb

    一.背景 Airbnb 平台包含数百万种不同的房源,用户可以通过浏览搜索结果页面来寻找想要的房源,我们通过复杂的机器学习模型使用上百种信号对搜索结果中的房源进行排序. 当用户查看一个房源时,他们有两种 ...