【问题标题】:Merging SQLite databases in Java throws "unique constraint failed"在 Java 中合并 SQLite 数据库会引发“唯一约束失败”
【发布时间】:2015-03-01 14:24:13
【问题描述】:

我正在尝试将两个 SQLite 数据库与 Java 合并。生成数据库方案如下:

public static void createDatabaseTables(Connection c)
{
    String sql;

    // creates the table HASHES
    sql = "CREATE TABLE HASHES("
            + "INPUTVALUE TEXT PRIMARY KEY,"
            + "HASHVALUE TEXT);";
    executeUpdate(c, sql);
    System.out.println("Table HASHES created successfully");
}

我正在使用以下代码合并两个数据库(第一个为空,第二个包含一些值(输入值和适当的 pearson 哈希))。

public static void mergeDatabases(String path1, String path2)
{
    // open a database connection
    Connection c = openDatabaseConnection(path1);

    // end the actual transaction (must be done to attach a new database)
    executeUpdate(c,"end transaction");

    // attach the second database to the first one
    String sql = "ATTACH DATABASE '" + path2 + "' AS toMerge";
    executeUpdate(c, sql);

    // copy the calculated hashes from the second database to the first one
    sql = "INSERT INTO HASHES SELECT * FROM toMerge.HASHES";
    executeUpdate(c, sql);

    // begin a transaction
    executeUpdate(c, "begin transaction");

    // close the connection
    closeDatabaseConnection(c);

    System.out.println("Databases merged.");
}

这导致我对每一行都出现以下异常(因为如果我在 INSERT 处添加“OR IGNORE”子句,每一行都会被忽略)

java.sql.SQLException: UNIQUE constraint failed: HASHES.INPUTVALUE

我确信 INPUTVALUE 列的值是唯一的(因为它们是由循环中的每个 ascii 符号生成的)。不过我得到了例外。

我做错了什么?

【问题讨论】:

  • 为什么觉得第一个数据库是空的?
  • 第一步有一个空数据库与一个包含数据的数据库合并,然后在合并的数据库中添加更多的数据库(数据库是从不同的主机生成的,它们将它们发送到一个主机,合并数据库)。

标签: java sqlite merge constraints


【解决方案1】:

我终于解决了这个问题。同时有两个连接到 SQLite 数据库导致了这个奇怪的问题。

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2015-05-22
    • 2017-09-15
    相关资源
    最近更新 更多