轉載自:
http://blog.csdn.net/seven_3306/article/details/9303879
該文章提出三種方式可以正確使用mysql 游標
1、當statement設置以下屬性時,采用的是流數(shù)據(jù)接收方式,每次只從服務器接收部份數(shù)據(jù),直到所有數(shù)據(jù)處理完畢,不會發(fā)生JVM OOM。
setResultSetType(ResultSet.TYPE_FORWARD_ONLY);
setFetchSize(Integer.MIN_VALUE);
2、調(diào)用statement的enableStreamingResults方法,實際上enableStreamingResults方法內(nèi)部封裝的就是第1種方式。
3、設置連接屬性useCursorFetch=true (5.0版驅動開始支持),statement以TYPE_FORWARD_ONLY打開,再設置fetch size參數(shù),表示采用服務器端游標,每次從服務器取fetch_size條數(shù)據(jù)。
但是實測,只有第一種,第二種方式可以,第三種方式不成功.
測試的MySQL JDBC版本 5.1.31
第三種方式,報錯,總之,只要有useCursorFetch的參數(shù)設置,就會報如下異常.
Prepared statement needs to be re-prepared

第二種方式 成功
將PreparedStatemen強轉為com.mysql.jdbc.PreparedStatement,然后執(zhí)行enableStreamingResults函數(shù).
注意不要設置fetchsize 否則沒有效果

第一種方式 成功
文章題目:正確使用MySQLJDBC游標-創(chuàng)新互聯(lián)
鏈接分享:
http://m.jiaotiyi.com/article/dgoiei.html