场景
最近维护一个嵌入式设备的java应用,由于内存有限,需要压缩内存,考虑到之前用的是mysql,需要对mysql替换,使用轻量的sqlite3。今天就记录下走过的坑。
mysql脚本转sqlite3
1.新建个sqlite3的文件并使用navicat连接
选择新建,然后找个目录新建个 .db或者.sqlite的文件,建个连接。
准备好mysql并连接上
我的是这个egemtmt-init的mysql数据库
使用navicat数据传输
传输完后,设置主键自增
这里有个问题,就是mysql原来主键自增的字段,传输给sqlite3数据库后发现主键没自增。需要检查下自增的字段,然后勾选上。
最下面的自动递增勾选上。其他表一样。
修改应用程序
1.添加sqlite3的驱动包
<!-- sqlite3 驱动包 --> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> </dependency>
这里没加版本,因为springboot自带版本,可以查看下:
这里使用的是 <sqlite-jdbc.version>3.28.0</sqlite-jdbc.version>
这个版本。
2.修改sqlite3的jdbc连接配置文件
用的若依框架,这里直接设置驱动和url,不需要设置用户名和密码
3.全局替换Date类型字段为String类型
将代码中的所有的Date类型替换为String类型。因为sqlite3数据库没有时间类型,数据库存储的是TEXT类型。
以下面的代码举例:
4.全局替换 sql文件中的 date()等函数
本人使用的是mybatis,在xml中的一些sql带有sysdate()等一些时间函数转成:datetime('now','localtime')
,
不加now显示的不是当地时间,因为我们是东八区,所以应该显示这个时间。
5.检查其他工具或者类型不匹配的问题
有些时间转换的 比如计算时间的间隔,由date转为string再计算。这里不举例了。报错的话,自己再具体解决。
将sqlite3的数据库导出成sql文件2
在sqlite3命令行中。2种方式进入sqlite3终端。
我使用第一种:
进入sqlite3的数据库文件夹下:
sqlite3 edgemgmt3.db .dump > edgemgmt.sql
导出数据为sql文件:
您可以在命令提示符中使用 SQLite .dump 点命令来导出完整的数据库在一个文本文件中,如下所示:
可以看到一大堆的表
在服务器上安装sqlite3环境并导入sql文件
sqlite3 edgemgmt3.db < edgemgmt-sqlite3.sql
测试
用navicat或者命令去查看即可。
大功告成!!