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

Java连接带密码保护的SQLite数据库报找不到表错误如何解决

加密SQLite数据库Java连接方案

问题原因分析

报错的根本原因是原生sqlite-jdbc驱动默认不支持加密数据库验证,你在URL中拼接的Password参数无法被驱动识别,驱动尝试打开加密数据库时会判定为文件无效,触发SQLite默认的「文件不存在则创建空数据库」逻辑,最终生成的空库中没有Employees表,所以抛出表不存在的错误。

解决步骤

1. 替换支持加密的JDBC驱动

使用支持加密的SQLite JDBC驱动,比如sqlite-jdbc-crypt,如果是Maven项目,在pom.xml中添加如下依赖:

<dependency>
    <groupId>com.github.willena</groupId>
    <artifactId>sqlite-jdbc-crypt</artifactId>
    <version>3.41.2.1</version>
</dependency>

如果是Gradle项目可以对应添加依赖配置,同时要移除项目中原生sqlite-jdbc的依赖,避免版本冲突。

2. 修正连接逻辑

不要将密码写在JDBC URL中,而是在建立连接后、执行其他SQL操作前,通过PRAGMA key命令传入密码,修正后的连接类代码如下:

public class SQliteDbConnection {
    
    public static Connection connect() throws ClassNotFoundException {  
         
        Class.forName("org.sqlite.JDBC");
        // 仅保留数据库路径,不要加Password等无关参数
        String url = "jdbc:sqlite:C:/ProgramData/BioPlugin/RightPunch.db";
        String dbPassword = "12345";
        Connection conn = null;  
        try {  
            conn = DriverManager.getConnection(url);
            // 连接建立后立即传入密码
            try (Statement stmt = conn.createStatement()) {
                stmt.execute("PRAGMA key = '" + dbPassword + "';");
                // 如果你的数据库是用SQLCipher加密的,还需要额外添加适配配置,比如:
                // stmt.execute("PRAGMA cipher_compatibility = 3;");
            }
            System.out.println("Connected with Database successfully");
        } catch (Exception e) {  
            e.printStackTrace(); 
        }  
        return conn;  
    }  
        
}

3. 业务查询代码无需修改

你原有查询Employees表的代码可以直接复用,无需调整。

常见排查点

  • 确认加密数据库的加密算法和驱动支持的算法匹配,如果你是用SQLCipher加密的数据库,需要使用支持SQLCipher的驱动版本,并且添加对应的cipher兼容配置
  • 确认C盘ProgramData目录的读写权限,避免因权限不足导致无法读取原数据库、触发新建空库的逻辑
  • 如果修改后仍提示密码错误,确认你加密数据库时使用的密码和代码中传入的密码完全一致

内容的提问来源于stack exchange,提问作者Ashiqur Rahman Abir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:15:03