jan*_*ith 15 java sql large-data-volumes out-of-memory
我有一个任务是将一个巨大的表转换为自定义XML文件.我将使用Java来完成这项工作.
如果我只是发出"SELECT*FROM customer",它可能会返回最终导致OOM的大量数据.我想知道,有没有办法可以立即处理记录,并在sql检索过程中从记忆中删除记录?
---于2009年7月13日编辑
让我详细说明我的问题.我有1个db服务器和1个应用服务器.当我在应用程序中发出选择查询时,数据将从数据库服务器传输到应用程序服务器.
我相信(如果我错了,请纠正我)ResultSet需要等到接收到查询中的所有记录.即使我们将获取大小设置为4,对于1000记录表,我们仍然最终在应用服务器的堆内存中有1000条记录,这是正确的吗?获取大小仅影响从/到数据库服务器的往返次数.
我的问题是,如何在它到达app服务器后立即开始处理该4个(或任何数字)记录,并将其丢弃以释放应用服务器中的内存?
通过更多信息,我可以得到更有帮助的答案.
如果您使用的是MySQL:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
Run Code Online (Sandbox Code Playgroud)
来自http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html:
java.util.Properties info = new java.util.Properties();
info.put ("user", "scott");
info.put ("password","tiger");
info.put ("defaultRowPrefetch","15");
getConnection ("jdbc:oracle:oci:@",info);
Run Code Online (Sandbox Code Playgroud)