使用分页查询语句。 (推荐学习:mysql学习)
因为分页查询每次只会查询少量数据,所以不会占用太多内存,而且数据量很大的时候,分页查询会节约一些时间的。
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查询数据过多内存溢出怎么办的详细内容。