本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9694719
建立时间:2004年12月20日




[java语言]JdbcTemplate为什末不用connection,connection为什末不能共享
原创空间,  软件技术

邢红瑞 发表于 2005/11/28 16:13:54

JdbcTemplate为什末包含javax.sql.DataSource ,而不是用connections,因为使用DataSource有很多优点,我们在复杂的应用中如果使用connections(当然可以使用DataSource.getConnection()得到),必须捕捉SQLExceptions,这样spring框架无法处理SQLException异常,在抛出异常时,无法关闭connection。connection为什末不能共享?DataSource.getConnection()得到connection实例,一般都不相同,这由连接池的具体实现控制,所以大家不要使用oracle的临时表,因为如果每次连接都不一样的话,下次就没有临时表了。建立连接是消耗时间的,在一段时间内,connection只能由一个用户使用,为了避免transaction产生冲突,一些jdbc驱动不支持多线程访问同一个connection。还有一个更致命的问题,众所周知,transaction是基于connection的,即使多个用户使用一个连接,大家在一个事务内操作数据库,一个数据库操作rollback,所有的数据库操作全部rollback,所以一直保持一个打开的connection代价是很大的。我只有在两个方法中处理一个事务时,把connection作为变量传递。 关于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除外。


阅读全文(8600) | 回复(1) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144769139 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号