浅析JDBC、DriverManage、JNDI、数据源(DataSource)、连接池的区别

浅析JDBC、DriverManage、JNDI、数据源(DataSource)、连接池的区别

  JDBC、DriverManage、JNDI、数据源(DataSource)、连接池都是Java数据库连接中常见的概念,然而很多畅销书的作者也喜欢混淆这些概念。如果对这些技术使用得非常熟练,混淆它们也无伤大雅,不过这是对初学者的一种二次伤害。有鉴于此,笔者简单总结了它们之间的区别。

JDBC与DriverManage

  先说JDBC与DriverManage。JDBC全称Java Database Connectivity,译为Java数据库连接。

  我们知道,数据库语言与Java语言是不同的语言,因此需要一种途径来将这两者联系起来。JDBC就起着这样的一种桥梁的作用。一般说JDBC也指包名前缀为java.sql的包的内容,它包含一系列的类与接口。常用的类与接口有DriverManager、Connection、Statement、Result、PreparedStatement等。这其中就包含DriverManager。

  一般来说,JDBC是Java数据库连接中的必用的技术手段,其它延伸出来的Java数据库连接技术都是对包含JDBC等技术封装之后的结果。而DriverManager是JDBC中建立连接的一个关键性的类,具体地说,DriverManager有一个静态方法: Connection getConnection(String url, String user, String password) 可直接进行与数据库的连接。

数据源(DataSource)

  数据源(DataSource)是一种升级版的DriverManager。之所以需要这种升级版,原因是DriverManager过于底层。DataSource位于javax.sql.DataSource(不是java.sql.DataSource)。DataSource同样有一个类似的方法 Connection getConnection(…)

JNDI

  JNDI全称Java Naming and Directory Interface,译为Java命名和目录接口。一般说JNDI也指包名前缀为Javax.naming的包的内容。虽然有了DataSource,但是仅仅使用DataSource仍然要在Java代码中添加大量的配置代码。这种情况下,JNDI应运而生。使用JNDI,就可以将一些配置信息使用标记语言(如xml)来描述,并存放到别处,这些就能实现解耦。比如说,JNDI中的lookup方法可以接收一个配置文件作参数,返回一个可以强制转换为DataSource类型的对象,然后就可以使用DataSource进行与数据库的连接。

连接池

  技术的发展永无止境。虽然有了上面的技术,然而这尚未解决频繁关闭数据库连接带来的损耗的问题。

  关于为什么需要使用连接池,可以参考笔者举的这个例子。把完成一次涉及数据库的操作看成去餐厅吃一次饭。原始的数据库连接方式相当于吃饭时使用的是一次性餐具。虽然一次性餐具对吃饭没有显著的坏处,但使用一次性餐具毕竟还有购买一次性餐具、用完后处理一次性餐具的问题。如果对于人很多、吃饭时间高度集中的学校来讲,还有更好的方法,那就是使用可重复利用的餐具。这样一来,很多个人吃饭也可以轮流使用同一套餐具,这就节约了资源。

  连接池是用于高效管理数据库连接。它可以在合适的时机建立、释放连接,其作用类似于虚拟机对内存的管理。具体来说,当程序需要进行数据库连接时,系统会一次性地创建多个数据库连接,并保存在连接池中。然后让该程序使用连接池的其中一个连接。当该程序不再需要数据库连接时,并不释放这个数据库连接,而是继续保留在连接池中供未来某程序使用。因此,这种方式避免了频繁地建立与释放数据库连接所带来的不必要损耗。

  常见的连接池有:

  • Hibernate使用的C3P0、Proxool等。

猜你喜欢

转载自blog.csdn.net/wangpaiblog/article/details/111602869
今日推荐