[java]记一次mysql转移到sqlite遇到的坑
前言
说起来我真的是没事找事,已经确定了架构并且开发结束的项目,临近要交产品了,我突发奇想想做一个sqlite版本的。到时候会不会更酷?
所有的sql脚本
全部调整为sqlite可以识别的方式,但是某些联合主键中的自增字段,只能舍弃,将联合主键的判断改为外部。
pom.xml
本来是没啥问题的,一开始都很顺利,无法就是pom.xml
去掉mysql
依赖,增加sqlite
依赖
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.21.0.1</version>
</dependency>
druid
无法就是druid
,驱动改成org.sqlite.JDBC
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: org.sqlite.JDBC
druid:
# 主库数据源
master:
url: jdbc:sqlite:D:/db.sqlite?date_string_format=yyyy-MM-dd HH:mm:ss
username:
password:
改掉validationQuery
的语句为
select 'x'
spring.datasource.druid.filter
去掉wall
。
quartz
无非就是quartz
增加锁行的另一种形式(伪锁行,并不会锁行,只因为sqlite会锁整个表,为了方便,我就不锁了,应用并没有什么并发量)
prop.put("org.quartz.jobStore.misfireThreshold", "12000");
prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ?");
factory.setQuartzProperties(prop);
mybatis
无非就是:
*Mapper.xml
中的所有system()
改成datetime('now', 'localtime')
。 所有的like
全部调整,原先:and name like concat('%', #{name}, '%')
,调整了改成下面
<if test="name != null and name != ''">
<bind name="name_like" value="'%'+ name + '%'"/>
and name like #{name_like}
</if>
只因为sqlite不支持concat,而mybatis不知道罢了
*Mapper.xml
中所有truncate
全部改成delete from table
,如果有递增的字段,还需要将对应的seq
清空,只需要在后面再增加DELETE FROM sqlite_sequence WHERE name = 'table_name';
待续
参考
Spring boot + Mybatis + SQLite 搭建blog API
本文来自:[java]记一次mysql转移到sqlite遇到的坑-小码农,转载请保留本条链接,感谢!
温馨提示:
本文最后更新于 2022年03月15日,已超过 913 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
正文到此结束
- 本文标签: java mysql sqlite
- 本文链接: https://djc8.cn/archives/java-remember-the-pit-encountered-when-transferring-mysql-to-sqlite.html
- 版权声明: 本文由小码农原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权