【问题标题】:How to set database password in sqlite JDBC?如何在 sqlite JDBC 中设置数据库密码?
【发布时间】:2015-01-28 21:40:31
【问题描述】:

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

【问题讨论】:

标签: java sqlite jdbc


【解决方案1】:

无法为 sqlite db 设置密码。 Sqlite3 虽然支持密码保护。我建议你选择 H2 数据库 (http://www.h2database.com/html/main.html),因为它非常快速且开源,而且也是用 java 编写的。它提供嵌入式数据库和服务器数据库。 Sqlite 不支持重命名和删除列。但是 h2 提供了所有必要的功能。

【讨论】:

    【解决方案2】:

    在标准 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 驱动程序位于类路径中。

    【讨论】:

    • 如果我想连接到已经存在的有密码的数据库怎么办?
    • 然后你使用上面的语法:DriverManager.getConnection("jdbc:sqlite:/path/to/file.db", "username", "password")
    • 正如我上面提到的,它没有给出预期的结果
    • 如果您能准确说明您提供的代码的期望结果是什么,我将不胜感激。我假设您的问题是关于如何在 JDBC 中为 SQLite 数据库创建 Connection
    • 好吧,假设我有一个带有密码的 sqlite 数据库,假设是“12345678”。你能给我一个连接到那个数据库的示例代码吗?
    【解决方案3】:

    复制自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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2014-09-04
      • 2021-08-03
      • 2013-02-03
      相关资源
      最近更新 更多