JDBC、驱动管理器与DataSource

一、JDBC 与 DriverManager

JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。应用程序使用JDBC访问数据库的方式如图所示。

从图中可以看出,应用程序使用JDBC访问特定的数据库时,需要与不同的数据库驱动进行连接。由于不同数据库厂商提供的数据库驱动不同,因此,为了使应用程序与数据库真正建立连接,JDBC不仅需要提供访问数据库的API,还需要封装与各种数据库服务器通信的细节。

从图中可以看出,JDBC的实现包括三部分,具体如下:

● JDBC驱动管理器:负责注册特定的JDBC驱动器,主要通过java.sql.DriverManager类实现。

● JDBC驱动器API:由SUN公司负责制定,其中最主要的接口是java.sql.Driver接口。

● JDBC驱动器:它是一种数据库驱动,由数据库厂商创建,也称为JDBC驱动程序。JDBC驱动器实现了JDBC驱动器API,负责与特定的数据库连接,以及处理通信细节。

二、DataSource

DriverManager#getConnection 是通过数据库驱动直接与数据库建立连接

而建立数据库连接属于耗费时间的事情,如果业务层每次进行 SQL 查询都使用此方式,将会产生较大的系统开销

了避免频繁的创建数据库连接,工程师们提出了数据库连接池技术。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立。

sun 公司在 jdbc 2.0 版本推出一个 DataSource 的东东,用来进行规范约束

相当于把 DriverManager 和连接池概念揉合在一起,如果你想获取数据库连接,你通过我 DataSource 获取,你不用关心连接池和数据库连接怎么创建的,用就完了。其实,DataSource 获取的连接来自于连接池,而连接池的连接其实还是从 DriverManager或类似组件中创建的

DriverManager 只是 jdbc 1.0 版本用来调用数据库驱动的的工具包,jdbc 2.0 版本推出 DataSource 之后,典型的像 DruidDataSource 就没有依赖 DriverManager,而是在自己实现类中调用了数据库驱动。这里只是重点强调,数据库连接不一定是使用 DriverManager 创建

总结下,数据源(DataSource)是 sun 公司指定用于获取数据库连接的规范接口,应用程序于数据库连接抽象的中间层,它存在于 javax.sql 包,用来代替 DriverManager 的方式获取数据库连接

这里画一张图来描述下,针对应用程序使用 DataSource 和 DriverManager 获取连接的不同

 

有了 DataSource 之后,数据库连接、用户名、密码都进行了统一的管理,作为 DataSource 属性的一部分,并且将数据库驱动名称填充,底层自动加载。

2.1 一些数据源的开源实现

一些开源组织提供了数据源的独立实现,c3p0、dbcp、proxool、druid等

C3P0是目前最流行的开源数据库连接池之一,它实现了DataSource数据源接口,支持JDBC2和JDBC3的标准规范,易于扩展并且性能优越,著名的开源框架Hibernate和 Spring使用的都是该数据源。

一些公司封装的datasourceclient,可以在数据源的外层包一层限流之类的功能,是运行在宿主机的client,最后访问数据库的还是宿主机。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值