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.
时,它不允许我访问
我哪里错了?
好的,所以我最终找到了存储库的创建者。而且他很容易就解决了,而且回答得非常快。
解决方法如下:
以下是一些可以测试的内容:
- 使用版本 3.31.1
- 尝试使用“jdbc:sqlite:file:C:\Users\User1\Desktop\test.db?cipher=sqlcipher&key=password123”作为 URI 进行数据库连接(注意添加的“file:”) .
- 尝试添加 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。
我正在尝试弄清楚如何在非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.
时,它不允许我访问我哪里错了?
好的,所以我最终找到了存储库的创建者。而且他很容易就解决了,而且回答得非常快。
解决方法如下: 以下是一些可以测试的内容:
- 使用版本 3.31.1
- 尝试使用“jdbc:sqlite:file:C:\Users\User1\Desktop\test.db?cipher=sqlcipher&key=password123”作为 URI 进行数据库连接(注意添加的“file:”) .
- 尝试添加 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。