我有大量原始 html 文件,我正在通过 Java 中的连接解析并插入 MySQL 数据库。
我正在使用“REPLACE INTO”语句和这种方法:
public void migrate(SomeThread thread) throws Exception{
PreparedStatement threadStatement = SQL.prepareStatement(threadQuery);
thread.prepareThreadStatement(threadStatement);
threadStatement.executeUpdate();
threadStatement.close();
for(SomeThread.Post P : thread.threadPosts){
PreparedStatement postStatement = SQL.prepareStatement(postQuery);
P.preparePostStatement(postStatement);
postStatement.executeUpdate();
postStatement.close();
}
}
我在自己的命令提示符下运行我的程序的 3 个单独实例,每个实例都有自己单独的 html 目录来解析和提交。
我正在使用 HeidiSQL 来监视数据库,并且发生了一件有趣的事情,例如,我会看到一个表中有 500,000 行,然后我将关闭 HeidiSQL 并稍后再检查以发现我现在有440,000 行。我正在使用的两个表也会发生同样的事情。
我的两个表都使用一个名为“id”的主键,它们的每个 ID 都有自己的域,但它们的值可能重叠并相互覆盖?我不确定这是否会成为问题,因为我认为 SQL 会区分表的“本地”id 值。
否则我想可能是因为我正在运行 3 个单独的实例,每个实例都与数据库有连接,所以当一行被提交时,正在发生某种魔法,执行交换到另一个提交语句,取代表,然后回到第一次提交,然后是一些更神奇的东西,导致数据库回滚收集的行数。
我对 SQL 很陌生,所以我不太确定从哪里开始,如果有人知道到底发生了什么并且可以指出我正确的方向,我会非常感激。
谢谢