首页
/ SQLite-JDBC 数据库连接与配置完全指南

SQLite-JDBC 数据库连接与配置完全指南

2026-02-04 04:34:10作者:董宙帆

前言

SQLite-JDBC 是一个纯 Java 实现的 SQLite 数据库驱动,它允许 Java 应用程序通过 JDBC API 访问 SQLite 数据库。本文将详细介绍如何使用 SQLite-JDBC 进行各种数据库操作,包括文件路径指定、内存数据库使用、备份恢复、BLOB 数据处理等高级功能。

数据库文件路径指定

Windows 系统路径

在 Windows 系统中指定数据库文件路径时,需要注意路径分隔符的使用:

try (Connection connection = DriverManager.getConnection("jdbc:sqlite:C:/work/mydatabase.db")) {
    // 数据库操作代码
}

技术要点

  • 使用正斜杠 / 作为路径分隔符,JDBC 会自动处理不同操作系统的路径差异
  • 路径可以是绝对路径或相对路径

UNIX/Linux/macOS 系统路径

在 UNIX 类系统中,路径格式如下:

try (Connection connection = DriverManager.getConnection("jdbc:sqlite:/home/leo/work/mydatabase.db")) {
    // 数据库操作代码
}

内存数据库与临时数据库

内存数据库

SQLite 支持纯内存数据库,不创建任何物理文件:

try (Connection connection = DriverManager.getConnection("jdbc:sqlite::memory:")) {
    // 内存数据库操作代码
}

应用场景

  • 单元测试
  • 临时数据处理
  • 不需要持久化的计算任务

临时数据库

创建临时数据库(会话结束后自动删除):

try (Connection connection = DriverManager.getConnection("jdbc:sqlite:")) {
    // 临时数据库操作代码
}

数据库备份与恢复

数据库备份

SQLite-JDBC 提供了方便的在线备份功能:

try (
    Connection conn = DriverManager.getConnection("jdbc:sqlite:");
    Statement stmt = conn.createStatement();
) {
    // 创建表并插入数据
    stmt.executeUpdate("create table sample(id, name)");
    stmt.executeUpdate("insert into sample values(1, \"leo\")");
    stmt.executeUpdate("insert into sample values(2, \"yui\")");
    
    // 备份到文件
    stmt.executeUpdate("backup to backup.db");
}

数据库恢复

从备份文件恢复数据库:

try (
    Connection conn = DriverManager.getConnection("jdbc:sqlite:");
    Statement stat = conn.createStatement();
) {
    stat.executeUpdate("restore from backup.db");
}

BLOB 数据处理

处理二进制大对象(BLOB)数据的完整流程:

  1. 创建包含 BLOB 列的表:

    create table T (id integer, data blob)
    
  2. 准备插入语句:

    PreparedStatement pstmt = conn.prepareStatement("insert into T values(1, ?)");
    
  3. 设置二进制数据:

    byte[] data = ...; // 准备二进制数据
    pstmt.setBytes(1, data);
    
  4. 执行插入操作:

    pstmt.executeUpdate();
    

类路径和网络资源中的数据库文件

从类路径加载数据库

访问打包在 JAR 文件中的数据库:

try (Connection conn = DriverManager.getConnection("jdbc:sqlite::resource:org/yourdomain/sample.db")) {
    // 只读操作代码
}

从网络资源加载数据库

try (Connection conn = DriverManager.getConnection("jdbc:sqlite::resource:http://example.com/sample.db")) {
    // 只读操作代码
}

注意事项

  • 资源数据库是只读的
  • 文件会被提取到临时目录(可通过 org.sqlite.tmpdir 系统属性配置)

原生库配置

自定义原生库路径

-Dorg.sqlite.lib.path=/path/to/folder
-Dorg.sqlite.lib.name=custom-library-name

覆盖自动检测的架构

-Dorg.sqlite.osinfo.architecture=arm

连接配置

通过 SQLiteConfig 类进行高级配置:

SQLiteConfig config = new SQLiteConfig();
config.setSharedCache(true);      // 启用共享缓存
config.recursiveTriggers(true);   // 启用递归触发器
// 其他配置...

try (Connection conn = DriverManager.getConnection("jdbc:sqlite:sample.db", config.toProperties())) {
    // 数据库操作代码
}

加密数据库支持

SQLite-JDBC 本身不提供加密功能,但可以通过特殊驱动实现:

  1. 指定加密支持库:

    -Dorg.sqlite.lib.path=.
    -Dorg.sqlite.lib.name=sqlite_cryption_support.dll
    
  2. 连接时提供密码:

    try (Connection connection = DriverManager.getConnection("jdbc:sqlite:db.sqlite", "", "password")) {
        // 加密数据库操作
    }
    

二进制密钥支持

不同加密驱动有不同的二进制密钥格式:

SSE 格式

try (Connection connection = DriverManager.getConnection("jdbc:sqlite:db.sqlite?hexkey_mode=sse", "", "AE...")) {
    // 使用十六进制密钥
}

SQLCipher 格式

try (Connection connection = DriverManager.getConnection("jdbc:sqlite:db.sqlite?hexkey_mode=sqlcipher", "", "x'AE...'")) {
    // 使用 SQLCipher 格式密钥
}

生成键值处理

SQLite 通过 last_insert_rowid 提供有限的生成键值支持:

// 禁用自动获取生成键值(提升性能)
try (Connection connection = DriverManager.getConnection("jdbc:sqlite::memory:?jdbc.get_generated_keys=false")) {
    // 数据库操作
}

显式只读事务(Hibernate 兼容)

为兼容 Hibernate,可以配置显式只读事务:

SQLiteConfig config = new SQLiteConfig();
config.setExplicitReadOnly(true);  // 启用显式只读

// 或通过连接参数
try (Connection connection = DriverManager.getConnection("jdbc:sqlite::memory:?jdbc.explicit_readonly=true")) {
    // 数据库操作
}

技术优势

  • 避免 SQLITE_BUSY 异常
  • 更好的 JPA/Hibernate/Spring 集成支持

Android 平台使用

在 Android 中使用时,需要特殊处理原生库:

  1. 从 SQLite-JDBC JAR 中提取原生库(位于 org/sqlite/native/Linux-Android
  2. 将库文件放置到 Android 项目的 jniLibs 对应架构目录中

目录映射关系

JAR 目录 Android Studio 目录
aarch64 arm64-v8a
arm armeabi
x86 x86
x86_64 x86_64

总结

本文全面介绍了 SQLite-JDBC 的各种使用场景和配置选项,从基础的文件路径指定到高级的加密数据库支持,涵盖了开发中可能遇到的大部分需求。通过合理利用这些功能,可以构建出高效、稳定的 SQLite 数据库应用。

登录后查看全文
热门项目推荐
相关项目推荐