如何在sqlite JDBC中设置数据库密码?

时间:2014-11-30 22:22:44

标签: java sqlite jdbc

在我的应用程序中,我使用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的等价物是什么?

3 个答案:

答案 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://stackoverflow.com/a/54797910/1365319复制

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);
    }
}