如何连接到加密的SQLite数据库?

vfh0ocws  于 2023-08-06  发布在  SQLite
关注(0)|答案(1)|浏览(232)

我使用“DB Browser for SQLite”创建了一个SQLite数据库,并使用SQLCipher 3对其进行了加密,但当我执行代码时,数据库无法读取。我解除了加密,它工作了。
如何连接到加密的SQLite数据库?我已经将SQLCipher jar添加到我的构建路径>库中。
错误:打开数据库:'src/database/cryptedDB.db?key=kilikilikoinkoin':文件、目录或卷名语法不正确
代码:

public class DBmanager {
    
    Connection connection;
    String database= "jdbc:sqlite:src/database/cryptedDB.db";
    private String encryptionKey = "kilikilikoinkoin";
    
    public DBmanager() {
        
    }
    
    public boolean Connect() throws SQLException {
        try {
            String url = database + "?key=" + encryptionKey;

             // Establish the connection with the modified URL
             Connection connection = DriverManager.getConnection(url);
            if (connection != null && !connection.isClosed()) {
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
        return false;
        
    }
}

字符串
将URL从?key=更改为?pragma_key=不起作用。Eclipse在sqLiteDatabase.rawQuery()中显示错误,即使我已经添加了SQLCipher,也要更正为“构建路径”。

SQLiteDatabase.loadLibs(); // Load SQLCipher native libraries
SQLiteDatabase sqLiteDatabase = SQLiteDatabase.openDatabase(database, passphrase, null, SQLiteDatabase.OPEN_READWRITE);
long nativeConnectionPtr =sqLiteDatabase.rawQuery("SELECT sqlite3_handle_v2('main');",null).getLong(0);
// Wrap the native connection in a java.sql.Connection object using SQLite JDBC driver
SQLiteConfig config = new SQLiteConfig();
config.setSharedCache(true);

xv8emn3q

xv8emn3q1#

使用JDBC库

<dependency>
        <groupId>io.github.willena</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.41.2.0</version>
</dependency>

字符串
然后创建连接

Connection connection =
                 DriverManager.getConnection("jdbc:sqlite:file:cryptedDB.db?cipher=sqlcipher&key=kilikilikoinkoin&legacy=3")


另外,确保JDBC连接字符串中包含“file”部分。

相关问题