SQLite 在 Java 中通常通过 JDBC 驱动进行访问。虽然 SQLite 并非内建在 Java 标准库中,但社区提供了优秀的开源 JDBC 封装驱动,使得我们可以像操作 MySQL 或 PostgreSQL 一样,使用标准 SQL 和 JDBC 语法无缝操作 SQLite 数据库。
📚 目录
- 准备工作:添加 JDBC 驱动依赖
- 创建数据库连接
- 执行 SQL(增删改查)
- 使用 PreparedStatement 防注入
- 事务处理
- SQLite 特性在 Java 中的使用注意
- 出站链接与推荐阅读
- 参考资料
1. 准备工作:添加 JDBC 驱动依赖
推荐使用 Xerial 提供的 SQLite JDBC 驱动:https://github.com/xerial/sqlite-jdbc
Maven 配置:
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.45.1.0</version>
</dependency>
Gradle:
implementation 'org.xerial:sqlite-jdbc:3.45.1.0'
2. 创建数据库连接
import java.sql.*;
public class SQLiteDemo {
public static void main(String[] args) {
String url = "jdbc:sqlite:sample.db";
try (Connection conn = DriverManager.getConnection(url)) {
if (conn != null) {
System.out.println("连接成功!");
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
📌 注意事项:
- SQLite 数据库文件路径可以是绝对路径或相对路径
- 自动创建不存在的数据库文件
3. 执行 SQL(增删改查)
创建表:
String sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT NOT NULL)";
Statement stmt = conn.createStatement();
stmt.execute(sql);
插入数据:
String sql = "INSERT INTO users(name) VALUES('Alice')";
stmt.executeUpdate(sql);
查询数据:
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
System.out.println(rs.getInt("id") + ": " + rs.getString("name"));
}
4. 使用 PreparedStatement 防注入
String sql = "INSERT INTO users(name) VALUES(?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "Bob");
pstmt.executeUpdate();
查询带条件:
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();
5. 事务处理
SQLite 默认每条 SQL 都是隐式事务。对于多条语句,建议使用显式事务处理:
try {
conn.setAutoCommit(false);
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO users(name) VALUES(?)");
pstmt.setString(1, "Charlie");
pstmt.executeUpdate();
pstmt.setString(1, "David");
pstmt.executeUpdate();
conn.commit(); // 提交事务
} catch (SQLException e) {
conn.rollback(); // 出错时回滚
}
6. SQLite 特性在 Java 中的使用注意
特性 | 是否支持 | 说明 |
---|---|---|
WAL 模式 | ✅ | 可执行 PRAGMA journal_mode=WAL |
附加数据库 | ✅ | 支持 ATTACH DATABASE 命令 |
扩展函数(如 REGEXP) | ❌ 默认不支持 | 需要 JNI 扩展 |
多线程连接 | ⚠️ | 多线程访问需手动加锁或使用连接池 |
推荐使用 HikariCP 作为 SQLite 的 Java 连接池(但在 SQLite 上效果有限,因写锁限制)
7. 🔗 出站链接与推荐阅读
外部资源:
推荐文章(站内):
- 👉 SQLite JDBC 高级用法与性能调优
- 👉 Java 中如何优雅使用事务和回滚机制
- 👉 SQLite 数据库连接池在 Java 中的实现方案
- 👉 PreparedStatement 防止 SQL 注入的实战
8. 📚 参考资料
- 官方 SQLite JDBC 驱动:https://github.com/xerial/sqlite-jdbc
- 《Java 核心技术 卷 II》数据库编程章节
- Stack Overflow:SQLite + Java 相关问题集锦
- Oracle 官方 JDBC 教程
- GitHub 示例项目:https://github.com/xerial/sqlite-jdbc/tree/master/src/test
✅ 下一篇将介绍 PHP 与 SQLite 的集成方式,包括使用 PDO_SQLITE 和 SQLite3 类两种方式。如果你想继续,请回复 “继续”。
发表回复