mybatis-sqlite日期类型对应关系
2024-08-23 04:31:01
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);
}
最新文章
- poj 1239
- vs2015打包winform程序遇到的一系列问题
- angular2开发01
- Vault插件示例--Vault Explorer与Thin Client的集成。
- Sqoop_mysql,hive,hdfs导入导出操作
- 基于cmake编译安装MySQL-5.5
- Plug-in &#39;org.eclipse.cdt.ui&#39; contributed an invalid Menu Extension
- build.gradle 使用tips
- Add controls dynamically in flowlayoutpanel
- 图片ppm编码格式
- .net 资源
- MFC之窗体改动工具栏编程状态栏编程程序启动画面
- IOS 私有变量 私有属性的书写方法
- Java简单实用方法一
- 使用Anaconda虚拟环境编译caffe-gpu pycaffe
- ZOC7在Mac下发送命令到多个窗口设置
- wonder vscode plugins
- 转:10分钟了解JS堆、栈以及事件循环的概念
- linux 修改密码命令
- linux基础知识(1)
热门文章
- 基于【 springBoot +springCloud+vue 项目】一 || 后端搭建
- 【Linux内核】CPU和线程
- vue实现滑块滑动校验
- Python——字符串增加颜色
- c# DirectoryInfo类
- CPNtools 模拟工具适合分析什么样的协议
- my.cnf参数说明
- Jmeter4.0 _Beanshell解析并获取json响应数据数组长度
- JVM参数优化(基础篇)
- Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学