(outofmemoryerror:java堆空间)在遍历oracle记录时
各位java开发人员好 我这里有点问题。我的代码从oracle数据库中获取结果集,将每一行打印到一个文件中,然后获取下一行,并一直持续到结果集的末尾 只是事情不是这样的。发生的情况是,它获取结果集,开始遍历行,并在运行时打印到文件,直到内存耗尽——声称它需要java堆上更多的空间 该应用程序当前运行时堆上有2g内存,代码在第150000行左右中断 我正在使用jodbc6.jar和Java6 下面是我的代码的一个想法:(outofmemoryerror:java堆空间)在遍历oracle记录时,java,oracle,Java,Oracle,各位java开发人员好 我这里有点问题。我的代码从oracle数据库中获取结果集,将每一行打印到一个文件中,然后获取下一行,并一直持续到结果集的末尾 只是事情不是这样的。发生的情况是,它获取结果集,开始遍历行,并在运行时打印到文件,直到内存耗尽——声称它需要java堆上更多的空间 该应用程序当前运行时堆上有2g内存,代码在第150000行左右中断 我正在使用jodbc6.jar和Java6 下面是我的代码的一个想法: Connection conn = DriverManager.getConn
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();
请尝试以下内容:
Statement stmt = conn.createStatement();
stmt.setFetchSize(someInt);
ResultSet rset = stmt.executeQuery(strSql);
这将控制一次提取多少条记录。处理如此大数据的另一种方法可能是不断返回行并将其写入文件。通过这种方式,字符串缓冲区不会持续增长,您应该能够将所有记录写入文件系统,然后延迟读取它们Ok,将尝试并报告回来(查询需要一段时间才能从网络返回记录)Thank我认为您的查询返回了大量行。作为旁注,您还应该调用ResultSet、语句和连接的close。我认为它可以工作,只是有点奇怪。。。结果是,当我的计数写入屏幕时,下降到x00000。所有计数都已清除,并从100000开始重新开始。非常奇怪的行为。。。这就像是一次又一次地运行这个过程。我需要在while子句中添加任何特殊内容吗?比如,getnextfetchset之类的?不,它应该是透明的。您实际的SQL查询是什么样子的?谢谢-我来做。写(strVar_1+“\n”);我正在将数据写入文件。