有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在ResultSet中遍历~4k行的行为很奇怪,没有返回正确的结果:

我有点迷路了。。。我使用OracleJDBC驱动程序(ojdbc6.jar)在Java7应用程序中建立到Oracle11数据库的连接。 我的“外部语句”从数据库中获取了大量ID和其他内容(返回一个包含4-5k行的结果集)。 我已经通过比较表中的行和结果集中的行来验证了这一点,它们与预期的一样。我的测试:

migration.last();
System.out.println("last: " + migration.getRow());
migration.first();

这将返回正确的行数(迁移是我的结果集)。 现在,我想遍历这个结果集,创建如下附加查询:

while (migration.next()) {
    String q = "select * from table2 where id = " + migration.getInt("ID");
    Statement innerStatement = con.createStatement();
    ResultSet data = innerStatement.executeQuery(q);
    while(data.next()) {
        // do stuff
    }

    data.close();
    innerStatement.close();
}

出于一些我不理解的原因,首先,while循环在“中间”中断,终止循环,没有任何异常

它发生在1500排和1900排之间。每次运行程序时,实际的行号似乎都是随机的。所以这可能和记忆有关?我的应用程序最多只使用50mb内存,而它最多可以使用4GB(JVM最大堆设置为4096)

当我评论这句话时:

ResultSet data = innerStatement.executeQuery(q);

该循环以应有的方式穿过所有这些~5k行,在1500-1900行之后不会中断

你知道哪里出了问题吗(为什么我没有任何例外?)

更新: 问题是由我使用的SwingWorker引起的。。。仍然不知道为什么,因为完全相同的代码(复制和粘贴)在程序的主功能中执行时效果非常好,而在SwingWorker中执行时则不起作用。 所以现在我完成了正确的DB任务,但它们阻止了Swing GUI(这就是为什么我使用SwingWorker…)

知道为什么以及如何解决吗


共 (0) 个答案