(在outofmemoryerror:java堆空间)迭代oracle记录时

时间:2010-03-15 18:05:52

标签: java oracle

你好java开发人员。

我在这里遇到了一些问题。我有从oracle数据库获取结果集的代码,将每一行打印到一个文件,然后获取下一行 - 并一直持续到结果集的结尾。

只有这不是发生的事情。会发生什么,它获取结果集,开始遍历行,打印到文件,直到它耗尽内存 - 声称它需要更多的空间在Java堆上。

该应用程序当前正在堆上运行2g内存,代码在第150000行左右中断。

我正在使用jodbc6.jar和java 6

以下是我的代码正在做什么的想法:

Connection conn = DriverManager.getConnection(url,"name","pwd");

conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery(strSql);

String strVar_1 = null;

long lCount = 0;
while(rset.next()){
        lCount++;
        if (lCount % 100000 == 0){
            System.out.println(lCount + " rows completed");
        }
      strVar_1 = rset.getString("StringID");  /// breaks here!!!!!!!!!

      if (strVar_1 == null){
        strVar_1 = "";
      }         
      if (!strQuery_1.equals("")){
        out.write(strVar_1 + "\n");
      }
 }
 out.close();

2 个答案:

答案 0 :(得分:4)

尝试以下:

Statement stmt = conn.createStatement();
stmt.setFetchSize(someInt);
ResultSet rset = stmt.executeQuery(strSql);

这将控制一次提取的记录数。

答案 1 :(得分:0)

也许处理这种大数据的另一种方法是继续返回行并将其写入文件。这样字符串缓冲区不会继续增长,您应该能够将所有记录写入文件系统,然后再读取它们