You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java(非Android)中连接加密SQLCipher数据库文件?

Java连接加密SQLCipher数据库解决方案

问题原因

你使用的org.xerial:sqlite-jdbc默认不支持SQLCipher加密算法,因此无法直接连接加密的SQLCipher数据库,需要更换为支持SQLCipher的JDBC驱动。

解决方案步骤

1. 替换Maven依赖

移除原有的sqlite-jdbc依赖,添加SQLCipher官方支持的JDBC驱动:

<dependency>
    <groupId>net.zetetic</groupId>
    <artifactId>sqlcipher-jdbc</artifactId>
    <version>4.5.5</version>
</dependency>

2. 加载SQLCipher本地库

SQLCipher依赖本地原生库(Windows对应.dll、Linux对应.so、Mac对应.dylib),多数情况下驱动会自动加载适配系统的库文件。若出现加载失败,可手动指定库路径:

// 示例:将SQLCipher原生库放到项目的native-libs目录下时
System.setProperty("jna.library.path", "src/main/resources/native-libs");

3. 连接并操作数据库的示例代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SQLCipherConnector {
    public static void main(String[] args) {
        // 加载SQLCipher驱动
        try {
            Class.forName("net.zetetic.database.sqlcipher.SQLiteDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return;
        }

        String dbPath = "D:/db.db3";
        String dbPassword = "your-db-password"; // 替换为你的数据库密码
        String jdbcUrl = String.format("jdbc:sqlite:%s", dbPath);

        try (Connection conn = DriverManager.getConnection(jdbcUrl, "", dbPassword)) {
            // 确认加密密钥生效(也可直接在URL中拼接:jdbc:sqlite:%s?key=%s)
            conn.createStatement().execute(String.format("PRAGMA key='%s';", dbPassword));

            // 执行查询示例,替换为你的表名
            String querySql = "SELECT * FROM your_table";
            try (PreparedStatement pstmt = conn.prepareStatement(querySql);
                 ResultSet rs = pstmt.executeQuery()) {
                while (rs.next()) {
                    // 示例:获取第一列数据并打印,根据实际表结构调整
                    System.out.println(rs.getString(1));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

4. 常见问题排查

  • 确认数据库密码完全匹配,注意大小写、特殊字符的正确性
  • 检查文件路径格式:Windows下可使用正斜杠/或双反斜杠\\
  • 若数据库由旧版SQLCipher创建,需执行PRAGMA cipher_compatibility = 3;指定兼容加密算法
  • 确保依赖版本与系统架构(x86/x64)一致,避免原生库加载失败

内容的提问来源于stack exchange,提问作者user25408231

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:07:31