正确使用MySQL JDBC游标
短信预约 -IT技能 免费直播动态提醒
转载自:
http://blog.csdn.net/seven_3306/article/details/9303879
该文章提出三种方式可以正确使用mysql 游标
1、当statement设置以下属性时,采用的是流数据接收方式,每次只从服务器接收部份数据,直到所有数据处理完毕,不会发生JVM OOM。
setResultSetType(ResultSet.TYPE_FORWARD_ONLY);
setFetchSize(Integer.MIN_VALUE);
2、调用statement的enableStreamingResults方法,实际上enableStreamingResults方法内部封装的就是第1种方式。
3、设置连接属性useCursorFetch=true (5.0版驱动开始支持),statement以TYPE_FORWARD_ONLY打开,再设置fetch size参数,表示采用服务器端游标,每次从服务器取fetch_size条数据。
但是实测,只有第一种,第二种方式可以,第三种方式不成功.
测试的MySQL JDBC版本 5.1.31
第三种方式,报错,总之,只要有useCursorFetch的参数设置,就会报如下异常.
Prepared statement needs to be re-prepared
第二种方式 成功
将PreparedStatemen强转为com.mysql.jdbc.PreparedStatement,然后执行enableStreamingResults函数.
注意不要设置fetchsize 否则没有效果
第一种方式 成功
http://blog.csdn.net/seven_3306/article/details/9303879
该文章提出三种方式可以正确使用mysql 游标
1、当statement设置以下属性时,采用的是流数据接收方式,每次只从服务器接收部份数据,直到所有数据处理完毕,不会发生JVM OOM。
setResultSetType(ResultSet.TYPE_FORWARD_ONLY);
setFetchSize(Integer.MIN_VALUE);
2、调用statement的enableStreamingResults方法,实际上enableStreamingResults方法内部封装的就是第1种方式。
3、设置连接属性useCursorFetch=true (5.0版驱动开始支持),statement以TYPE_FORWARD_ONLY打开,再设置fetch size参数,表示采用服务器端游标,每次从服务器取fetch_size条数据。
但是实测,只有第一种,第二种方式可以,第三种方式不成功.
测试的MySQL JDBC版本 5.1.31
第三种方式,报错,总之,只要有useCursorFetch的参数设置,就会报如下异常.
Prepared statement needs to be re-prepared
第二种方式 成功
将PreparedStatemen强转为com.mysql.jdbc.PreparedStatement,然后执行enableStreamingResults函数.
注意不要设置fetchsize 否则没有效果
第一种方式 成功
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341