共计 986 个字符,预计需要花费 3 分钟才能阅读完成。
自动写代码机器人,免费开通
这篇文章主要介绍 sql 查询数据过多内存溢出的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
正常来说,一般是不会出现这种情况的,但也不能保证,偶尔有这种情况发生,解决方案如下:
使用分页查询语句。
因为分页查询每次只会查询少量数据,所以不会占用太多内存,而且数据量很大的时候,分页查询会节约一些时间的。
String sql = SELECT uid,uname FROM t_user LIMIT ?,? ;
PreparedStatement ps = con.prepareStatement(sql) ;
int pageSize = 10000;
int pageId = 0;
do {
pst.setInt(1, pageId * pageSize);
pst.setInt(2, pageSize);
ResultSet rs = pst.executeQuery();
boolean isEmpty = true;
while (rs.next()) {
isEmpty = false;
id = rs.getInt(1);
name = rs.getString(2);
}
if (isEmpty) {
break;
}
pageId++;
} while (true);
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
添加 url 参数配置
在 jdbc 的 URL 上加两个参数就 OK,成功解决内存溢出的问题。
jdbc:mysql://localhost:3306/db3?useCursorFetch=true defaultFetchSize=100
(解释一下 Fetch,当我们执行一个 SQL 查询语句的时候,需要在客户端和服务器端都打开一个游标,并且分别申请一块内存空间,作为存放查询的数据的一个缓冲区。这块内存区,存放多少条数据就由 fetchsize 来决定,同时每次网络包会传送 fetchsize 条记录到客户端)
以上是“sql 查询数据过多内存溢出的解决方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!
向 AI 问一下细节
正文完