你好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();
答案 0 :(得分:4)
尝试以下:
Statement stmt = conn.createStatement();
stmt.setFetchSize(someInt);
ResultSet rset = stmt.executeQuery(strSql);
这将控制一次提取的记录数。
答案 1 :(得分:0)
也许处理这种大数据的另一种方法是继续返回行并将其写入文件。这样字符串缓冲区不会继续增长,您应该能够将所有记录写入文件系统,然后再读取它们