SQLite基础学习
一、介绍
1.1 什么是SQLite
- SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。
- 就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
1.2 为什么要用 SQLite
- 不需要一个单独的服务器进程或操作的系统(无服务器的)。
- SQLite 不需要配置,这意味着不需要安装或管理。
- 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
- SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
- SQLite 是自给自足的,这意味着不需要任何外部的依赖。
- SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
- SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
- SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
- SQLite 可在 UNIX和 Windows中运行。
1.3 目标
- 在JAVA工程中使用SQLite
- 多个工程共用一个SQLite库
二、准备
2.1 sqlite下载
- 下载地址:https://www.sqlite.org/download.html
- 文件名称:
sqlite-dll-win64-x64-3350500.zip(sqlite-dll-win32-x86-3350500.zip)
sqlite-tools-win32-x86-3350500.zip
2.2 sqlite-JDBC驱动
- 驱动:sqlite-jdbc-3.8.6.jar
- 地址:我是通过maven库下载的
三 、实例
导入sqlite-jdbc-3.8.6.jar包到工程中
3.1 单一工程测试
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class SqliteJDBCTest {
public static void main(String[] args){
try {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:D:/workutils/SQLite/space/test.db");
Statement stat = conn.createStatement();
stat.executeUpdate("drop table if exists test;");
stat.executeUpdate("create table test(name varchar(20), occupation int);"); //创建表
stat.executeUpdate("insert into test values('aaa',111);"); //插入数据
stat.executeUpdate("insert into test values('bbb',222);");
ResultSet rs = stat.executeQuery("select * from test;"); //查询
String json = JSON.toJSONString(resultSetToJson(rs));
System.out.println(json);
rs.close();
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* ResultSet转list
* @param rs
* @return
* @throws SQLException
*/
private static JSONArray resultSetToJson(ResultSet rs) throws SQLException{
// json数组
JSONArray array = new JSONArray();
// 获取列数
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
// 遍历ResultSet中的每条数据
while (rs.next()) {
JSONObject jsonObj = new JSONObject();
// 遍历每一列
for (int i = 1; i <= columnCount; i++) {
String columnName =metaData.getColumnLabel(i);
String value = rs.getString(columnName);
jsonObj.put(columnName, value);
}
array.add(jsonObj);
}
return array;
}
}
输出结果:[{"occupation":"111","name":"aaa"},{"occupation":"222","name":"bbb"}]
3.2 调用已有表测试
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class Test {
public static void main(String[] args){
try {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:D:/workutils/SQLite/space/test.db");
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("select * from test;");
String json = JSON.toJSONString(resultSetToJson(rs));
System.out.println(json);
rs.close();
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
private static JSONArray resultSetToJson(ResultSet rs) throws SQLException{
// json数组
JSONArray array = new JSONArray();
// 获取列数
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
// 遍历ResultSet中的每条数据
while (rs.next()) {
JSONObject jsonObj = new JSONObject();
// 遍历每一列
for (int i = 1; i <= columnCount; i++) {
String columnName =metaData.getColumnLabel(i);
String value = rs.getString(columnName);
jsonObj.put(columnName, value);
}
array.add(jsonObj);
}
return array;
}
}
输出结果:[{"occupation":"111","name":"aaa"},{"occupation":"222","name":"bbb"}]
特别说明:
“jdbc:sqlite:test.db”:会在工程的工作空间工程目录下创建test.db文件
“jdbc:sqlite:D:/workutils/SQLite/space/test.db”:自定义文件地址
如果工程中数据库文件地址不一致,访问的就不是同一个数据库表,达不到公用目的。