在我的应用程序中,我使用JDBC连接到sqlite数据库,这是一个示例代码,用于创建数据库并在其中创建示例表。
public class Main {
public static void main(String[] args) {
try {
Class.forName("org.sqlite.JDBC");
Connection connection = DriverManager.getConnection("jdbc:sqlite:db.sqlite","admin","123");
Statement statement = connection.createStatement();
String query = "CREATE TABLE Users(ID INTEGER PRIMARY KEY AUTOINCREMENT," +
"Login TEXT, " +
"Password TEXT);";
statement.execute(query);
String query1 = "INSERT INTO Users(Login, Password) VALUES ('user1','password1')";
String query2 = "INSERT INTO Users(Login, Password) VALUES ('user2','password2')";
String query3 = "INSERT INTO Users(Login, Password) VALUES ('user3','password3')";
statement.addBatch(query1);
statement.addBatch(query2);
statement.addBatch(query3);
statement.executeBatch();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
现在的问题是,我可以轻松打开我的db文件而无需从外部输入任何用户或密码信息,那么我给DriverManager使用的参数在哪里以及如何为数据库指定密码?
如评论中所述,在.Net中,我可以在建立连接时执行以下操作
using(SQLiteConnection con = new SQLiteConnection("Data Source=db.sqlite; Password=123;")
{
//code goes here
}
那么JDBC的等价物是什么?
答案 0 :(得分:1)
无法在标准SQLite发行版中的SQLite数据库上设置密码。在Java中连接SQLite数据库的方式是:
Class.forName("org.sqlite.JDBC"); // force loading of SQLite JDBC driver
Connection conn = DriverManager.getConnection("jdbc:sqlite:/path/to/file.db");
确保在运行程序时,SQLite JDBC驱动程序位于类路径上。
答案 1 :(得分:0)
无法为sqlite db设置密码。 Sqlite3虽然支持密码保护。我更喜欢你选择h2数据库(http://www.h2database.com/html/main.html),因为它非常快且开源,也用java编写。它既提供嵌入式数据库,也提供服务器数据库。 Sqlite不支持重命名和删除列。但是h2提供了所有必要的功能。
答案 2 :(得分:0)
https://github.com/Willena/sqlite-jdbc-crypt上有一个名为sqlite-jdbc-crypt
(“具有加密和身份验证支持的SQLite JDBC驱动程序”)的Apache 2.0许可软件包。
单击中心的“发布”标签以下载预构建的.jar文件。
以下示例Java代码创建了一个名为db.sql
的加密SQLite数据库,该数据库已使用密码apassword
进行了加密:
package com.name.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(final String[] args) {
try (final Connection connection = DriverManager.getConnection("jdbc:sqlite:db.sqlite", "",
"apassword")) {
try (final Statement stmt = connection.createStatement()) {
stmt.execute("CREATE TABLE test (data TEXT(10));");
stmt.execute("INSERT INTO test VALUES('hello');");
}
connection.close();
} catch (final SQLException e) {
e.printStackTrace();
}
System.out.println("finished");
System.exit(0);
}
}