Posted on 2009-12-25 02:31
leekiang 阅读(403)
评论(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