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

使用 JDBC 来访问数据库的基本流程

  1. 构造连接数据库的 4 个属性:驱动器名、数据库 URL、数据库用户名、数据库密码。

  2. 在系统中注册驱动器。方法有很多,如 System.setProperty("jdbc.drivers", driver);

  3. 将原始的数据库信息传入静态方法 DriverManager.getConnection 来获得一个 Connection 对象。

  4. 利用 Connection 对象生成一个 Statement 对象。

  5. 使用 Statement 对象的方法 executeXXX 来执行 SQL 语句。如果这个 SQL 语句属于查询语句,可以接收其返回值作为查询结果。

示例代码如下:

/**
 * driver、url、user、password、sql 均为 String 类型
 */
System.setProperty("jdbc.drivers", driver);
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery(sql);

JDBC 与 DriverManage

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

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

数据源

  数据源(DataSource)是一种升级版的 DriverManager。之所以需要这种升级版,原因是 DriverManager 过于底层。数据源可以由连接池作为实现,用以减少连接数据库时所带来的消耗。DataSource 位于 javax.sql.DataSource(不是 java.sql.DataSource)。从代码逻辑来讲,DataSourceDriverManage 几乎是等同的,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 等。

池技术与缓存

  在很多领域中都有所谓的"XX池技术"。池技术与缓存技术很相似,甚至可以说池技术是一种特殊的缓存技术,但它们还有所不同。

  池技术往往缓存的是一种环境,而缓存技术则通常缓存的是具体的某些数据。

  池技术缓存的环境往往在创建和销毁时都伴随着巨大的消耗,而池技术缓存的环境往往会带来一定的开销,因此需要合理控制缓存的容量。而缓存技术缓存的是一些短时间不会变的数据,缓存这些数据的开销不是太大,但获取这些数据的开销会很大,它需要考虑脏读的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值