原创

[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

温馨提示:
本文最后更新于 2022年03月15日,已超过 69 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
本文目录