麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Oracle > 正文

Oracle出現超出打開游標最大數的解決方法

2024-08-29 13:59:07
字體:
來源:轉載
供稿:網友

本文實例講述了Oracle出現超出打開游標最大數的解決方法。分享給大家供大家參考,具體如下:

Java代碼在執行conn.createStatement()和conn.prepareStatement()的時候,實際上都是相當與在數據庫中打開了一個cursor。尤其是,假如你的createStatement和prepareStatement是在一個循環里面的話,就會非常輕易出現這個問題。因為游標一直在不停的打開,而且沒有關閉。

一般來說,我們在寫Java代碼的時候,createStatement和prepareStatement都應該要放在循環外面,而且使用了這些Statment后,及時關閉。最好是在執行了一次executeQuery、executeUpdate等之后,假如不需要使用結果集(ResultSet)的數據,就馬上將Statement或PreparedStatement關閉。

對于出現ORA-01000錯誤這種情況,單純的加大open_cursors并不是好辦法,那只是治標不治本。實際上,代碼中的隱患并沒有解除。而且,絕大部分情況下,open_cursors只需要設置一個比較小的值,就足夠使用了,除非有非常非凡的要求。

假如你不使用連接池,那么就沒有什么問題,一旦Connection關閉,數據庫物理連接就被釋放,所有相關Java資源也可以被GC回收了。

但是假如你使用連接池,那么請注重,Connection關閉并不是物理關閉,只是歸還連接池,所以PreparedStatement和ResultSet都被持有,并且實際占用相關的數據庫的游標資源,在這種情況下,只要長期運行,往往就會報“游標超出數據庫答應的最大值”的錯誤,導致程序無法正常訪問數據庫。

正確的代碼,如下所示:

for(int i=0;i<balancelist.size();i++){  prepstmt = conn.prepareStatement(sql[i]);  prepstmt.setBigDecimal(1,nb.getRealCost());  prepstmt.setString(2, adclient_id);  prepstmt.setString(3, daystr);  prepstmt.setInt(4, ComStatic.portalId);  prepstmt.executeUpdate();  //循環到一定數量就要關閉,防止出現超出最大游標數量  prepstmt.close();}

希望本文所述對大家Oracle數據庫程序設計有所幫助。


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品久久久久久久午夜片 | 视频二区国产 | 久久经典 | 中文字幕激情视频 | 欧美一级理论 | caoporn国产一区二区 | 性生活视频网站 | 一本色道久久99精品综合蜜臀 | 国产精品亚洲一区二区三区在线观看 | 999久久久久久| japanese javhd| 中文字幕亚洲欧美 | 久久久国产一区二区三区 | 久久经典国产视频 | 毛片大全 | 午夜小视频免费观看 | 日韩精品免费一区二区三区 | 国产毛片aaa一区二区三区视频 | 国产一级毛片av | 亚欧在线免费观看 | 男女隐私免费视频 | 亚洲午夜影院在线观看 | a级毛片免费观看在线播放 日本aaa一级片 | 国产喷白浆10p | 国产亚洲精品久久久久久久久 | 久久精品一区视频 | 中文字幕综合在线观看 | 成人福利免费在线观看 | 国产激情精品一区二区三区 | 国产午夜精品一区二区三区四区 | 国产精品一区二区三区在线 | 亚洲第一色婷婷 | 成人在线视频免费观看 | 久久久www成人免费精品 | chinese xvideos gay | 美国一级毛片片aa久久综合 | 日本黄色大片免费 | 亚洲精品 在线播放 | 久久精品久久久久 | 国产免费资源 | 欧美特级黄色 |