SQLite实践
1、为什么要使用SQLite
项目比较小,但是又需要存储一些具有有效时间的token,避免在有效期内多次发起token请求。
考虑采用,SQLite或者XML文件。
2、SQLite是什么
SQLite是一个软件库,实现了自给自足,无服务器,零配置(无需按安装和管理配置),事务性的,在世界被广泛部署的SQL数据库引擎。SQLite源代码不受版权限制。
简单来讲:轻量型数据库,占用资源小。
写是这样写,但是还是不理解,为什么就是轻量型呢?建议自行查阅。以下是来自网络查询资料(不限于百度):
1、SQLite是一款轻型数据库,遵守ACID(是指数据库管理系统在写入或更新的过程中,为保证事务的正确可靠,所具备的四个特性,原子性,一致性,隔离性,持久性)的关系型数据管理系统(DBMS)
2、设计目标是嵌入式,占用资源非常低,在嵌入式设备中,可能只需要几百k的内存就够了。
3、工作原理。不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。(copy而已)
3、在SpringBoot中部署SQLite
3.1、 添加依赖
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.34.0</version>
</dependency>
3.2 、配置数据源(创建数据库文件)
在SpringBoot项目的配置文件application.properties(.yml)中,填写配置信息
spring.datasource.url=jdbc:sqlite:/path/sqlite.db
spring.datasource.driver-class-name=org.sqlite.JDBC
其中path是数据库创建位置(会自动创建),下面是自己测试用例以及数据库创建的位置。
spring.datasource.url=jdbc:sqlite:sqlite.db
spring.datasource.driver-class-name=org.sqlite.JDBC
3.3、 创建实体类(entity)
public class User{
private int id;
private String name;
private int age;
}
3.4、创建数据表
关于SQLite的数据类型以及一些常用约束之类的,可以参考菜鸟教程。
CREATE TABLE 'user'
(
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, -- 序号
name VARCHAR(255) NOT NULL, --姓名
age INT NOT NULL, --年龄
);
解释一下:INTEGER PRIMARY KEY AUTOINCREMENT,表示id是主键,且自增。
自增约束(AUTOINCREAMENT),只能作用于INTERGER且是主键的字段,下面的用法是不对的
id INT PRIMARY KEY AUTOINCREMENT NOT NULL, -- 序号
3.5、创建对应的dao、service、xml文件
不再赘述!!!
4、SQLite的小tips
1、自动增加的ID参数, 可以使用AUTOICREMENT;
2、alter table 命令仅仅支持重命名表和在已有的表中增加列;
5、完善-自动创建实体类对应的表
错误描述:
打包运行的时候,会自动生成sqlite.db数据库,但是无法生成对应的数据表,因此需要进行配置,使其可以自动生成实体类对应的表。
解决方法:
1、`配置文件中加入下面代码
spring.jpa.hibernate.ddl-auto=update
2、给实体类加入注解
@Entity