Java操作sqlite3数据库心得

前言

java操作数据库的一些配置文件请点击这里点这里跳转

本文仅记录一些心得和遇到的问题及解决办法


一、心得

1.sqlite数据库本身

sqlite是一个很轻量级的数据库,暂未发现HTTP连接的方式,一般的做法是放在IDEA中的resources目录下,保证数据跟着项目走,因为一般是做嵌入式的数据库.

但是java的项目嘛,就多环境配置了多个路径,这里写了两个配置文件地址,只有URL的区别

只要运行系统上有sqlite引擎就可以了.

sqlite的sql和其他关系型数据库sql格式大多一样,只有方言和一些命令不太一样,这个直接照抄百度即可

sqlite数据库本身也挺特殊,它内部我所知道的只支持4种数据类型

 我所用的全都是text,其中没有时间格式,这也会引出下面的问题!

datasource:
  type: com.alibaba.druid.pool.DruidDataSource
  driverClassName: org.sqlite.JDBC
  url: jdbc:sqlite:/opt/sqlite3/db/test.db
  #url: jdbc:sqlite:D:/sqlite/test.db
    druid:
      # ?????
      initialSize: 5
#      # ???????
      minIdle: 10
#      # ???????
      maxActive: 20
      validation-query: SELECT 1
      testOnBorrow: true
      test-on-return: true
      use-unfair-lock: true
      remove-abandoned: true
      remove-abandoned-timeout: 1800
      log-abandoned: false
      pool-prepared-statements: false
      max-pool-prepared-statement-per-connection-size: -1

二.遇到的问题

1.driverClassName: org.sqlite.JDBC,这个JDBC的版本问题,我之前从网上抄的版本是3.7.0,出现了很严重的bug,在修改完IP地址之后,内部JDBC连接status字段直接错乱,所有的sql都会报错,纯纯的JDBC连接挂掉了,只能靠重启恢复,多方求解也无法搞定,后来发现问题出现在JDBC上,去Maven找了版本,找了个较新的3.28.0才最终解决问题

2.JDBC和持久层框架Mabatis在windows和linux上不同的支持,这个也是很蛋疼的问题,在windows上运行sql好好的,但是上了linux就报错,我个人的理解是JDBC和Mabatis配合,在Windows环境上可以自动将日期字符串"2022-10-10 19:19:19"转换为Date格式,也就是你的实体类中Date类型字段的Setter方法的传入参数为Date类型即可,代码如下

private Date createTime;
//windows环境
public void setCreateTime(Date createTime) {
   this.createTime = createTime;
}

//Linux环境
public void setCreateTime(String createTime)
    {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        try {
            this.createTime = simpleDateFormat.parse(createTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

Linux上就无法自动转换,需要将Setter方法的入参改为String类型,这个和数据库的存储类型有直接关系,Sqlite支持字符串存储,不支持时间戳

3.方言的问题也挺麻烦,我在IDEA上配置了专门的Sqlite数据源,但是并不能识别方案,写在sql里的方法代码都会标红

<dependency>
    <groupId>com.zsoltfabok</groupId>
    <artifactId>sqlite-dialect</artifactId>
    <version>1.0</version>
</dependency>

这里提供一个sqlite方言库,我引入试了,没成功,好像是maven找不到包


总结

记一次遇到的坑和困扰了一天的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值