Willena sqlite jdbc 无法打开 SqlCipher 数据库

Willena sqlite jdbc cannot open SqlCipher db

我正在尝试弄清楚如何在非android java.

中加密 sqlite 数据库

它似乎不是超级简单,但我 Willena jdbc crypt 它似乎能够创建一个加密的数据库,但我就是不知道如何用它访问 SQLCipher 4 加密的数据库.

这是我的代码。

String path = "jdbc:sqlite:C:\Users\User1\Desktop\testServer232.db";
    Connection connection = null;
    try
    {
        // create a database connection
        connection = DriverManager.getConnection(path+"?cipher=sqlcipher&key=a");
        Statement statement = connection.createStatement();
        statement.setQueryTimeout(30);  // set timeout to 30 sec.

        statement.executeUpdate("drop table if exists person");
        statement.executeUpdate("create table person (id integer, name string)");
        statement.executeUpdate("insert into person values(3, 'leo1')");
        statement.executeUpdate("insert into person values(4, 'yui1')");
        ResultSet rs = statement.executeQuery("select * from person");
        while(rs.next())
        {
            // read the result set
            System.out.println("name = " + rs.getString("name"));
            System.out.println("id = " + rs.getInt("id"));
        }
    }
    catch(SQLException e)
    {
        // if the error message is "out of memory",
        // it probably means no database file is found
        System.err.println(e.getMessage());
    }
    finally
    {
        try
        {
            if(connection != null)
                connection.close();
        }
        catch(SQLException e)
        {
            // connection close failed.
            System.err.println(e.getMessage());
        }
    }

此代码确实有效,但我认为它不会生成 SqlCipher 4 加密数据库。当我尝试使用 Sqlite 的数据库浏览器打开它时,当我输入密码 = a.

时,它不允许我访问

我哪里错了?

好的,所以我最终找到了存储库的创建者。而且他很容易就解决了,而且回答得非常快。

解决方法如下: 以下是一些可以测试的内容:

  1. 使用版本 3.31.1
  2. 尝试使用“jdbc:sqlite:file:C:\Users\User1\Desktop\test.db?cipher=sqlcipher&key=password123”作为 URI 进行数据库连接(注意添加的“file:”) .
  3. 尝试添加 SQLCipher 的旧参数,如此处可用 (https://github.com/Willena/sqlite-jdbc-crypt#aes-256-bit-cbc---sha1sha256sha512-hmac-sqlcipher)。 URI 会变成这样:“cipher=sqlcipher&key=password123&legacy=4”

这对我有用。我建议其他人使用它,如果他们对一种简单的方法感兴趣,可以像在 android 项目中那样完成 sqlcipher 版本 4。