DataSource和DriverManager的区别是什么啊?还有,为什么很多网站上都说数据库连接池(大多是dataSource)取得的是一个连接的引用(句柄),而DriverManager取得的是一个物理连接,后面这句我理解,就是想知道,为什么说数据库连接池(大多是dataSource)取得的是一个连接的引用(句柄)???

解决方案 »

  1.   

    因为DataSource一般是由容器(如Tomcat)提供的 因此不能在程序中通过创建来获得对象实例,而是通过另外一种Java技术JNDI来获得DataSource对象的引用。
      

  2.   

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

  3.   

    DriverManager 的 getConnection 直接从数据库获得连接,也就是你说的物理连接。连接的建立是非常缓慢和消耗资源的,对于MySQL可能不是非常明显,在Oracle下,新建立一个的速度难以忍受(相对于采用连接池)。同样,关闭连接也将切断物理连接而DataSource 可以理解成一个代理,你的程序不是从数据库拿连接,而是从数据源(一个连接池) 获得,数据源会按照一定的算法,再从数据库获取连接。
    因为数据源里面已经存在一些可用的物理连接,所以你获取的速度会非常快(代理商把货放到自己店里了,现场就可以拿走,不用去厂家)。
    同样,你关闭的时候,也是归还给数据源。反正东西也没坏,留着下次用吧!
      

  4.   

    那请问用DataSource取得的connection,调用connection.close()方法,这个方法的实质是什么啊?怎么实现的啊