阅读大结果集时从连接失败中恢复



我正在将查询从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> ...?

这是更有希望的,因为您可以快速跳过已经处理过的行。但是,您必须确保两次尝试之间的行和行的内容保持不变。

。 。

其他/更好的建议?

将结果分开并将较小的零件分配到线程?

相关内容

  • 没有找到相关文章

最新更新