我正在将查询从Java发送到Oracle数据库,并在结果集中获取结果:
ResultSet rset = null;
try{
stmt = conn.createStatement();
rset = stmt.executeQuery(query);
}
catch (Exception e){
e.printStackTrace();
}
然后将结果写入文件:
while(rset.next()){
for(int i=1;i<=columnCount;i++){
out.append(rset.getString(i) + ";");
}
out.append(System.getProperty("line.separator"));
}
结果集很大。千兆字节。将所有这些数据导出到文件中需要一段时间,但这不是问题。问题是与数据库的连接,该数据库时不时地删除 - 我仍在阅读数据。我可以重新连接我的代码并重新执行查询,并且可以阅读输出文件,以查看我已经走了多远。
我剩下的问题是:到达结果集中的位置是什么?
- while(rset.next())直到我处于正确的排号码?
- 将原始查询与(...)中的选择 *一起围绕着RONNUM> ...?
- 其他/更好的建议?
我剩下的问题是:到达结果集中的最佳方法是什么?
很难说最好的方式是什么。您需要尝试一种或多种方法,看看您是否对它们感到满意。
whial(rset.next())直到我处于正确的排号码?
imo这不是有效的,因为如果先前的尝试失败了100万行,则代码将需要在重新启动之前跳过数百万行。
围绕原始查询,从(...)中的选择 * rownum> ...?
这是更有希望的,因为您可以快速跳过已经处理过的行。但是,您必须确保两次尝试之间的行和行的内容保持不变。
。 。其他/更好的建议?
将结果分开并将较小的零件分配到线程?