关于JAVA的数据库连接池

yuji_tt 2008-01-24 12:01:14
DataSource和DriverManager的区别是什么啊?还有,为什么很多网站上都说数据库连接池(大多是dataSource)取得的是一个连接的引用(句柄),而DriverManager取得的是一个物理连接,后面这句我理解,就是想知道,为什么说数据库连接池(大多是dataSource)取得的是一个连接的引用(句柄)???
...全文
248 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2008-01-24
  • 打赏
  • 举报
回复
因为DataSource一般是由容器(如Tomcat)提供的 因此不能在程序中通过创建来获得对象实例,而是通过另外一种Java技术JNDI来获得DataSource对象的引用。
casablancaliu 2008-01-24
  • 打赏
  • 举报
回复
mark
xiaoben008 2008-01-24
  • 打赏
  • 举报
回复
UP
楼上上说的非常正解哦
storm_mxj 2008-01-24
  • 打赏
  • 举报
回复
xuexi
老紫竹 2008-01-24
  • 打赏
  • 举报
回复
你关闭的时候,也是归还给数据源。反正东西也没坏,留着下次用吧!

数据源并没有关闭物理连接,而是打了一个空闲的标志,准备给下个请求使用。
yuanqingfei 2008-01-24
  • 打赏
  • 举报
回复
老紫竹的比喻很赞的说。
yuji_tt 2008-01-24
  • 打赏
  • 举报
回复
那请问用DataSource取得的connection,调用connection.close()方法,这个方法的实质是什么啊?怎么实现的啊
老紫竹 2008-01-24
  • 打赏
  • 举报
回复
DriverManager 的 getConnection 直接从数据库获得连接,也就是你说的物理连接。连接的建立是非常缓慢和消耗资源的,对于MySQL可能不是非常明显,在Oracle下,新建立一个的速度难以忍受(相对于采用连接池)。同样,关闭连接也将切断物理连接

而DataSource 可以理解成一个代理,你的程序不是从数据库拿连接,而是从数据源(一个连接池) 获得,数据源会按照一定的算法,再从数据库获取连接。
因为数据源里面已经存在一些可用的物理连接,所以你获取的速度会非常快(代理商把货放到自己店里了,现场就可以拿走,不用去厂家)。
同样,你关闭的时候,也是归还给数据源。反正东西也没坏,留着下次用吧!

cursor_wang 2008-01-24
  • 打赏
  • 举报
回复
看来要了解一下J2EE的知识了.JNDI是Java命名和目录接口的首字母的缩写.J2EE平台通过JNDI名称来定位提供服务(资源访问)的对象.但我们并不是直接通过JNDI查找到资源访问对象的,而是查找到连接工厂,连接工厂"生产"出资源访问对象.数据库资源的连接工厂是Javax.sql.DataSource对象,它可以创建java.sql.Connection数据库连接对象.

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧