我正在从Java向Oracle数据库发送查询,并在ResultSet中获取结果:
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"));
}
ResultSet很大。千兆字节。将所有这些数据导出到文件需要一段时间,但这不是问题。问题是与数据库的连接,一次又一次地丢失 - 而我仍在读取数据。我可以让我的代码重新连接并重新执行查询,我可以读取输出文件,看看我已经走了多远。
我剩下的问题是:到达ResultSet中的最佳方式是什么?
答案 0 :(得分:0)
我剩下的问题是:到达ResultSet中的最佳方式是什么?
很难说最佳方式是什么。你需要尝试一种或多种方法,看看你是否对它们感到满意。
执行while(rset.next()),直到我找到正确的行号?
IMO这样效率不高,因为如果先前的尝试在第100行失败,则代码将需要在重新启动之前跳过1百万行。
使用SELECT * FROM(...)WHERE rownum&gt;包围原始查询...?
这个更有前途,因为您可以快速跳过已处理的行。 但是,您必须确保两次尝试之间行的顺序和行内容的顺序保持不变。
其他/更好的建议?
如何分割结果并将较小的部分分配给线程?