Re: [問題] PreparedStatement 與 Cursor 的關係
※ 引述《joetsai (路人酒菜)》之銘言:
: Method 如下:
: public void insert(Connection i_conn) throws Exception {
: PreparedStatement ps = null;
: String strSql = " insert into table1 ( id ) values ( ? ) ";
: try {
: ps = i_conn.prepareStatement(strSql);
: ps.setString(1, getId());
: ps.executeUpdate();
: } finally {
: try {
: ps.close();
: } catch (Exception e) {
: }
: }
: }
: 從外部傳入 Connection 重複執行 insert 8000 次 做完後在外部一起Commit
: 偶爾會出現 Maximum open cursors exceeded (ORA-01000) 的錯誤
: DB 是 Oracle 10g 預設 Cursor 是 300個
: 請問是因為 一個 prepareStatement 產生一個 Cursor 嗎?
: 可是程式有進行close 是因為產生的來不及關閉嗎?
: 還是我的觀念錯誤!?
: 謝謝~~~
你的問題的確是因為Cursors有時來不及關閉,所以偶爾會產生這個錯誤。
建議改用Statement,而且只用一個Statement物件來執行原本的動作,
然後,使用Statement物件所提供的execute函數,
把要執行的SQL語法串成一個String物件,
當成參數傳至execute函數,
你一定會發現Java VM的記憶體使用量突然變的好低,
你知道的,
記憶體的使用量最好跟V領一樣,
越低越好。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.62.64.95
推
07/07 23:18, , 1F
07/07 23:18, 1F
→
07/07 23:20, , 2F
07/07 23:20, 2F
→
07/07 23:35, , 3F
07/07 23:35, 3F
→
07/07 23:43, , 4F
07/07 23:43, 4F
推
07/12 00:35, , 5F
07/12 00:35, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):