Posted on 2009-12-25 02:31
leekiang 閱讀(408)
評論(0) 編輯 收藏 所屬分類:
jdbc、事務、并發
1,關于statement,resultset和connection的問題
statement,resultset屬于弱refrence,即如果statement關掉,resultset就會被自動釋構,弱
refrence的做法不保險,所以JDBC3.0開始明確規定了如果connection被關,所有statement都應該關,不過這取決于使用的數
據庫驅動。
應該DBMS 執行操作后,顯式的關閉statement ,因為在connection關閉前,JDBC statement仍舊處于打開狀態,當返回resultset后,關閉statement是必要的,尤其在遇到異常的時候。
如果不使用connection pool可以直接關閉connection,不考慮statement的關閉,使用連接池的時候,務必關閉statement,否則你的連接馬上被用光,使用statement pooling除外。
http://www.w3china.org/blog/more.asp?name=hongrui&id=10283
2,Software caused connection abort: socket write error
最終找到了原因:sql寫錯了,寫成了where name='?'
有人說原因:
oracle數據庫連接與連接池之間沖突導至.
oracle database把空閑一段時間的連接關閉了,而應用服務器連接池卻認為該邊接還是可用的,再次訪問時還是使用該連接,導致出現連接異常。
方法,當然是改數據庫配置了.
spring對oracle的clob和StoredProcedure 的處理
經過幾天的夜戰,終于知道使用spring對oracle的存儲過程操作,程序死掉的真正原因,一旦執行存儲過程沒有任何返回值,因為 “Statement.getUpdateCount() returns 1 instead of -1”,是oracle的驅動的bug,10.1.0.2的驅動就不行,聽說10.1.0.3就沒有問題,但是10.1.0.3的jdbc驅動不能下載。大家可以使用weblogic8.1SP3帶的10.1.0.2或weblogic9beta的10.1.0.2,可以解決這個問題。不知道開發 oracle jdbc的程序員是什末人,沒畢業的大學生,還是拖欠了工資的程序員,開發水平遠不如開源數據庫的jdbc驅動的人呢,再次建議oracle驅動最好是自己命名,把文件名加上版本信息,要不會死人的。
http://72.5.124.102/thread.jspa?messageID=1424984
http://group.gimoo.net/review/44109
http://azi.javaeye.com/blog/182146
http://hi.baidu.com/happyidea/blog/item/c84b313de75add0abba16779.html
3,Random Connection Closed Exceptions
These can occur when one request gets a db connection from the connection
pool and closes it twice.
見http://tomcat.apache.org/tomcat-4.1-doc/jndi-datasource-examples-howto.html