JDBC 大数据量查询内存溢出

发布于 2021-11-14 00:14:17 字数 2121 浏览 927 评论 13

执行一个大概不到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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

拥有 2021-11-19 12:14:27

堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些

爱的那么颓废 2021-11-19 12:14:18

这些道理其实大家都懂,就像有个人跟你说我要解决温饱,但是你说党的优越性一样

如此安好 2021-11-19 12:14:15

堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些

奈何桥上唱咆哮 2021-11-19 12:14:15

这个是肯定的,但是会导致效率比较低

沦落红尘 2021-11-19 12:13:38

代码优化还是老调重弹吧,不要在循环里面做使用资源的事情

归属感 2021-11-19 12:07:34

我目前就是采用这种方式,但是效率比较低

路还长,别太狂 2021-11-19 11:54:47

分页,优化代码。

猫九 2021-11-19 11:19:56

嗯,主要是查询,我做成分页的方式来查,但是效率会比较低

爱的那么颓废 2021-11-19 08:50:31

堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些

挽清梦 2021-11-19 04:45:42

oracle

像你 2021-11-18 23:30:41

数据库是mysql?

悲喜皆因你 2021-11-18 08:10:51

除了这个方式,能否在代码上进行优化?

眼眸里的那抹悲凉 2021-11-17 00:54:47

堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文