我在这里迷失了...我使用Oracle JDBC驱动程序(ojdbc6.jar)建立与Java 7应用程序中的oracle 11数据库的连接。 我的“外部语句”从我的数据库中获取了很多id和一些其他东西(返回一个4-5k行的ResultSet)。 我已经通过将表中的行与ResultSet中的行进行比较来验证这一点,它们是预期的。我的测试:
migration.last();
System.out.println("last: " + migration.getRow());
migration.first();
这将返回正确的行数(迁移是我的ResultSet)。 现在,我想遍历此ResultSet,创建如下所示的其他查询:
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的内存,而它最多可以使用4 GB(JVM最大堆设置为4096)。
当我评论这条线时:
ResultSet data = innerStatement.executeQuery(q);
循环遍及所有那些~5k行,并且在1500-1900行之后不会中断......
知道出了什么问题(为什么我根本没有任何例外?)。
更新 问题是由我正在使用的SwingWorker引起的......仍然不知道为什么,因为完全相同的代码(复制和粘贴)在程序的主函数中执行时非常有效,并且在我的SwingWorker中执行时不起作用。 所以现在我完成了正确的DB-jobs,但它们阻止了Swing GUI(这就是我使用SwingWorker的原因......)
知道为什么以及如何解决这个问题?