永发信息网

求问如何避免JDBC内存溢出问题

答案:1  悬赏:80  手机版
解决时间 2021-03-21 17:18
  • 提问者网友:临风不自傲
  • 2021-03-21 11:49
求问如何避免JDBC内存溢出问题
最佳答案
  • 五星知识达人网友:摆渡翁
  • 2021-03-21 12:03
完整形式如:jdbc:mysql://192.168.1.252:3306/lims?useUnicode=true&charsetEncoding=utf8&useCursorFetch=true&defaultFetchSize=100
此方法只针对mysql有效。
方法二:采用分页查询的方式,在不使用连接池的情况下,可采用同一个Connection对象,每执行完一次操作就关闭PreparedStatement对象和ResultSet对象。然后在下一次操作的时候,重新打开PreparedStatement对象和ResultSet对象。(注意这里必须关闭这两个对象)
Sqlserver和Oracle:
方法:采用分页查询的方式,在不使用连接池的情况下,可采用同一个Connection对象,每执行完一次操作就关闭PreparedStatement对象和ResultSet对象。然后在下一次操作的时候,重新打开PreparedStatement对象和ResultSet对象。
内部原理与探讨:
采用java的JDBC操作数据库时,默认数据缓存的方式,即将从数据库查询得到的数据先缓存到本地内存中,然后从内存中读取数据(这也是JDBC的结果集支持上下移动的原因,但Oracle提供的JDBC实现默认是不支持这种上下移动的),所以如果从数据库中得到的数据被过多的缓存在本地内存中,如果超出了内存承受的范围,就会造成内存溢出的情况。
像Mysql的方法一,使用的是URL加参数的方式,这其实是采用了Mysql的游标,数据就不会缓存在本地内存中,而是ResultSet对象指向的是数据库中的记录,即使是上亿条记录,只要网络不断,也不会出现异常情况。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯