Operation not allowed after ResultSet closed

  1. 首先應該按照網上搜到的方法檢查一下是否是一個statement對多個ResultSet進行操作。

比方說:

Statement st = conn.CreateStatement();

ResultSet rs1 = st.executeQuery();

ResultSet rs2 = st.executeQuery();

則必須先對rs1進行操作,然後再對rs2進行操作,不能交替操作。否則會引起rs已經關閉錯誤,因爲執行第三條語句的時候,程序默認將rs2關閉,再對rs2進行操作的時候,就會發生上面描述的錯誤。

2.  即在我的程序中所犯的錯誤:

下面是一個遞歸程序用來讀取數據庫中的帖子。


wKiom1VCGieStj3mAALDAqy594Q621.jpg


在一個tree函數中傳入三個參數:一個數據庫連接,一個父節點,一個層數。

在想了好久之後,覺得自己是不是在遞歸的裏層將rs close掉,導致外層使用不便啊,後來一想,這是遞歸程序,不會出現這種問題。順着這個思路往下走,突然發現自己犯了一個很低級的錯誤:在遞歸裏層將Connection變量關閉掉了,自然ResultSet也跟着關閉了,這纔出現題目的那種錯誤。

3. 關於JSP的調試方法:

MyEclipse環境下,對於JSP程序進行斷點調試,感覺不太方便,不如System.out.println語句來得實在。

如上圖所示,我在while循環之後,添加了一行打印語句,順藤摸瓜慢慢縷清了思路。

4. 心得:

遇到bug一定不要急躁,遇到問題纔是提升能力的機會,所謂的經驗,其實就是解決的一個又一個的問題的累加。要想着自己一定能克服,要幻想着程序成功運行之後的喜悅,耐心的思考,纔有可能找到問題的根源。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章