我的任务是将一个巨大的表转换为自定义 XML 文件。我将使用 Java 来完成这项工作。
如果我只是发出“SELECT * FROM customer”,它可能会返回大量数据,最终导致 OOM。我想知道,有没有一种方法可以在记录可用后立即处理该记录,并在 sql 检索过程中从内存中删除该记录?
--- 2009 年 7 月 13 日编辑
让我详细说明我的问题。我有 1 台数据库服务器和 1 台应用程序服务器。
当我在应用程序中发出选择查询时,数据将从数据库服务器传输到应用程序服务器。
我相信(如果我错了,请纠正我)ResultSet 将需要等到收到查询中的所有记录。即使我们将获取大小设置为 4,对于 1000 条记录的表,我们最终在应用程序服务器的堆内存中仍然有 1000 条记录,这是正确的吗?获取大小仅影响从/到数据库服务器的往返次数。
我的问题是,如何在 4 个(或任何数量)记录到达应用程序服务器后立即开始处理它,并对其进行处理以释放应用程序服务器中的内存?
通过更多信息,我可以获得更有用的答案。
如果您使用的是 MySQL:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
from http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)