JDBC 大数据量查询内存溢出
执行一个大概不到30W的表,查询的字段均使用了索引,但是使用JDBC查询,内存溢出
public List findFuncListForJDBC2(String sql) {
FileLogger.getLogger().warn("执行查询SQL:" + sql);
Connection myConn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List lstResult = new ArrayList();
try {
myConn = getJdbcSqlMap();
pstmt = myConn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
pstmt.setFetchSize(1000);
rs = pstmt.executeQuery();
ResultSetMetaData dat = rs.getMetaData();
int i = 0;
HashMap map = null;
while (rs.next()) {
i++;
map = new HashMap();
for (int j = 1; j <= rs.getMetaData().getColumnCount(); j++) {
map.put(dat.getColumnName(j).toString(), rs.getObject(j));
}
lstResult.add(map);
}
return lstResult;
} catch (SQLException sqlexception) {
FileLogger.getLogger().error("执行查询出错!", sqlexception);
throw new DaoException("Error getLeftModule. Cause: " + sqlexception);
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (myConn != null && !myConn.isClosed())
myConn.close();
} catch (SQLException e) {
FileLogger.getLogger().error("释放资源出错!", e);
}
}
}
异常信息如下:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些
这些道理其实大家都懂,就像有个人跟你说我要解决温饱,但是你说党的优越性一样
堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些
这个是肯定的,但是会导致效率比较低
代码优化还是老调重弹吧,不要在循环里面做使用资源的事情
我目前就是采用这种方式,但是效率比较低
分页,优化代码。
嗯,主要是查询,我做成分页的方式来查,但是效率会比较低
堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些
oracle
数据库是mysql?
除了这个方式,能否在代码上进行优化?
堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些