java - 在 Java 中合并 SQLite 数据库会抛出 "unique constraint failed"

标签 java sqlite merge constraints

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

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 符号生成的)。尽管如此,我还是得到了异常(exception)。

我做错了什么?

最佳答案

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

关于java - 在 Java 中合并 SQLite 数据库会抛出 "unique constraint failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28794621/

相关文章:

java - 在android中设置httpclient超时

java - 如何向 Spring MVC View 公开 Spring bean?

java - SQLite DB创建表时名称列错误

c# - sqlite3 异步插入和更新

firebase - 如何将数据从 Firebase 保存到 SQLite Android

java - Spark-Java:从命令行构建文档示例

java - 为什么用户定义的异常类在 Java 中是首选/重要的?

c++ - 将n组文件组合在一起(随机且不重复)

python - 将级别附加到 python pandas 中的列索引

android - 添加我的 FileProvider 时出现问题