我正在尝试将两个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");
}
我使用以下代码合并两个数据库(第一个是空的,第二个包含一些值(inputvalues和适当的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符号生成的)。不过我得到了例外。
我做错了什么?
答案 0 :(得分:0)
我终于解决了这个问题。 SQLite数据库有两个连接同时导致这个奇怪的问题。