我在Java中的mysql查询总是在某个位置停止(即卡住并且不继续),即543,858;即使该表包含大约。 2,000,000 个条目。我已经通过记录当前的结果获取来检查这一点。 它是可重现的,并且每次都会在同一位置发生。
"SELECT abc from bcd WHERE DATEDIFF(CURDATE(), timestamp) <= '"+days+"'");
补充:这绝对是一个Java错误,我刚刚在Navicat中尝试过这个语句(运行时间为50秒)。
在日志告诉我它现在正在添加位置 543,858 的结果后,查询似乎卡住了。
try {
...
ResultSet res = new ResultSet();
PreparedStatement stmt = new PreparedStatement(); // prepare statmenet etc.
stmt.setFetchSize(Integer.MIN_VALUE);
res = stmt.executeQuery();
...
System.out.println(res.getStatement());
...
while (res.next())
treeSet.add(res.getString("userid"));
} catch (Exception e) {
e.printStackTrace();
}
编辑:我们能够找出问题所在。这个方法很好,返回的结果(500,000而不是2,000,000)也正确(在错误的数据库中查找以验证金额);问题是,使用上面发布的结果的下一个方法调用实际上需要永远进行,但没有实现日志记录。所以我被缺少控制台日志愚弄了。
无论如何,谢谢!
最佳答案
我认为在处理 50 万条记录后,您可能会耗尽内存。尝试使用命令行选项 -Xmx
等分配更多内存。请参阅 here有关命令行选项的更多信息。
关于java - JDBC/结果集错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8699962/