【发布时间】: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