如何避免JDBC内存溢出问题
来源:互联网 发布:天猫美工工资一般多少 编辑:程序博客网 时间:2024/06/05 18:09
Mysql:
方法一:在连接mysql的URL后加两个参数:useCursorFetch=true&defaultFetchSize=100
完整形式如: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对象指向的是数据库中的记录,即使是上亿条记录,只要网络不断,也不会出现异常情况。
像Mysql的方法而,依然采用了数据缓存的方式,但这种情况下缓存的数据量不会太对,只要PreparedStatement对象和ResultSet对象关闭了,缓存的数据也就消失了,故也不会出现内存溢出的情况。
- 如何避免JDBC内存溢出问题
- 如何避免JDBC内存溢出问题
- 如何在Android应用当中避免内存溢出问题
- 如何避免图像加载OOM 内存溢出 的问题
- Java编程如何避免内存溢出?
- 浅谈如何避免Android内存溢出
- 【Java JVM】如何避免内存泄漏、溢出
- Android高级开发第一讲--如何在Android应用中避免内存溢出OOM问题
- Android高级开发第一讲--如何在Android应用中避免内存溢出OOM问题
- Android如何避免内存泄露及内存溢出(OOM)
- 内存溢出和内存泄漏的区别和如何避免内存溢出
- 如何避免内存泄漏、溢出的几种常用方法
- 关于加载图片避免出现内存溢出的问题
- android避免内存溢出方案
- 加载图片避免内存溢出
- 如何解决weblogic的内存溢出问题
- 如何排查java内存溢出问题
- android 内存优化 避免内存溢出
- OCP-1Z0-051-V9.02-174题
- 怎么卸载安装在Ubuntu下的gcc?
- UVa 465 Overflow (比较大小难道不应该用double吗)
- CODE 88: Jump Game II
- 感谢LP
- 如何避免JDBC内存溢出问题
- autohotkey +vba 利用文本文件传递数据(2)-中断与延时
- struts2
- Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name
- UVa 748 / POJ 1001 Exponentiation (浮点高精度求幂&正则表达式的应用)
- 马尔可夫随机场(Markov Random Field)
- Socket
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
- 关于 qt 移植到 omap3530 总结