0

我有大量原始 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 很陌生,所以我不太确定从哪里开始,如果有人知道到底发生了什么并且可以指出我正确的方向,我会非常感激。

谢谢

4

2 回答 2

0

您可能想要使用INSERT INTO而不是REPLACE INTO. 数据不会消失。

以下是一些提示:

  • 您是否有另一个正在运行的线程实际上会删除条目?
  • 其他人可以访问数据库吗?

不确定 HeidiSQL 可能会做什么。要排除这种可能性,可以改用 MySQL Workbench。

于 2014-10-03T08:18:19.243 回答
0

是的,现在我对我的表运行 COUNT(*) 查询,我看到我的所有行实际上都在那里。

heidiSQL 摘要页面很可能只是一个非常粗略的估计。

感谢使用工作台皮特的建议,我会尝试一下,看看它是否比海蒂更好,因为海蒂经常冻结我。

于 2014-10-03T17:33:43.333 回答