什么是JDBC?
全称是Java数据库连接(Java Database Connectivity),应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。
具体实现
由java设计jdbc驱动器以及驱动器接口,
然后各个数据库厂商实现接口建立JDBC驱动器
操作:
JDBC的基本操作
JDBC批处理
在实际开发中,经常需要向数据库发送多条SQL语句,这时,如果逐条执行这些SQL语句,效率会很低。
为此,JDBC提供了批处理机制,即同时执行多条SQL语句。Statement和PreparedStatement都实现了批处理。
JDBC处理事务
在JDBC编程中,每次创建和断开Connection对象都会消耗一定的时间和IO资源。频繁地创建、断开数据库连接势必会影响数据库的访问效率,甚至导致数据库崩溃。
为了避免频繁的创建数据库连接,提出了数据库连接池技术。
什么是数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立。
通过连接池连接数据库过程:
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,
当应用程序访问数据库时并不是直接创建Connection,而是向连接池“申请”一个Connection。
如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。
使用完毕后,连接池会将该Connection 回收,并交付其他的线程使用,
以减少创建和断开数据库连接的次数,提高数据库的访问效率。
DataSource接口
为了获取数据库连接对象(Connection),JDBC提供了javax.sql.DataSource接口,它负责与数据库建立连接,并定义了返回值为Connection对象的方法:
很明显第一个是无参,第二个需要传递登录信息
数据源
我们习惯性的把实现了javax.sql.DataSource接口的类称为数据源,
顾名思义,数据源即数据的来源。在数据源中存储了所有建立数据库连接的信息。
数据源中包含数据库连接池。如果数据是水,数据库就是水库,数据源就是连接水库的管道,终端用户看到的数据集是管道里流出来的水。
常用数据源
DBCP是数据库连接池(DataBase Connection Pool)的简称,是Apache组织下的开源连接池实现,也是Tomcat服务器使用的连接池组件。
单独使用DBCP数据源时,需要在应用程序中导入两个jar包:
commons-pool.jar包
DBCP数据库连接池实现包的依赖包,为commons-dbcp.jar包中的方法提供了支持。
commons-dbcp.jar包
是DBCP数据源的实现包,包含了所有操作数据库连接信息和数据库连接池初始化信息的方法,并实现了DataSource接口的getConnection()方法。
获取DBCP数据源对象
commons-dbcp.jar包中包含两个核心类,分别是BasicDataSourceFactory和BasicDataSource,它们都包含获取DBCP数据源对象的方法。
BasicDataSource
是DataSource接口的实现类,主要包括设置数据源对象的方法。
常用方法
BasicDataSourceFactory
是创建BasicDataSource对象的工厂类,它包含一个返回值为BasicDataSource对象的方法createDataSource(),该方法通过读取配置文件的信息生成数据源对象并返回给调用者。这种把数据库的连接信息和数据源的初始化信息提取出来写进配置文件的方式,让代码看起来更加简洁,思路也更加清晰了。
当使用DBCP数据源时,首先得创建数据源对象
创建数据源对象方式
通过BasicDataSource类直接创建数据源对象
使用BasicDataSource类创建一个数据源对象,手动给数据源对象设置属性值,然后获取数据库连接对象。
通过读取配置文件创建数据源对象
使用BasicDataSourceFactory工厂类读取配置文件,创建数据源对象,然后获取数据库连接对象。
C3P0是目前最流行的开源数据库连接池之一,它实现了DataSource数据源接口,支持JDBC2和JDBC3的标准规范,易于扩展并且性能优越,著名的开源框架Hibernate和 Spring使用的都是该数据源。
我们在使用C3P0数据源开发时,需要了解C3P0中DataSource接口的实现类ComboPooledDataSource,它是C3P0的核心类,提供了数据源对象的相关方法。
C3P0和DBCP数据源所提供的方法大部分功能相同
都包含了设置数据库连接信息的方法和数据库连接池初始化的方法,以及DataSource接口中的getConnection()方法。
创建数据源对象
创建数据源对象可以使用ComboPooledDataSource类。
该类有两个构造方法
通过ComboPooledDataSource类直接创建数据源对象
使用ComboPooledDataSource类直接创建一个数据源对象,手动给数据源对象设置属性值,然后获取数据库连接对象
通过读取配置文件创建数据源对象
通过ComboPooledDataSource (String configName)构造方法读取c3p0-config.xml配置文件,创建数据源对象,然后获取数据库连接对象。