Java Web程序设计——数据库连接池与DBUtils工具
数据库连接池
什么是数据库连接池
- 在使用JDBC编程时,每次访问数据库都需要创建对象,访问完毕后也需要断开连接(销毁对象)。为了避免频繁的创建数据库连接,提出来数据库连接池技术。
- 应用程序就不需要创建和断开连接对象,而是交给数据库连接池管理。
- 数据库连接池断开,不是销毁对象,而是把连接对象归还给连接池。
- 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立。
- 采用数据库连接池操作数据库的示意图:
- 优点:通过数据库连接池管理连接对象,减少了数据库连接对象的创建和销毁,提高了数据库的访问效率。
- 数据库连接池基本参数:
- 初始化大小:数据库连接池里面初始的连接对象个数
- 最大连接数:数据库连接池里面最大的连接对象个数
- 最大等待时间:用户通过连接池取连接对象时,需要等待的世界
- 最大空闲连接:数据库连接池里面,在用户访问趋于稳定时,最大空闲连接个数
- 最小空闲连接:在用户访问趋于顶峰时,数据库连接池里面剩余的最小连接对象个数。
DataSource接口
- 为了获取数据库连接对象(Connection),JDBC提供了javax.sql.DataSource接口,它负责与数据库建立连接,并定义了返回值Connection对象的方法:
Connection getConnection()
Connection getConnection(String username,String password)
- 习惯性的把实现了javax.sql.DataSource接口的类称为数据源,即数据的来源。在数据源中存储了所有建立数据库连接的信息。
DBCP数据源
- DBCP数据源连接池(DataBase Connection Pool),是由apache组织提供的数据库连接池技术,开源免费。
- 在项目开发中,使用DBCP的基本步骤:
- 前提导入DBCP的jar包:commons-dbcp.jar,commons-pool.jar
- DBCP获取连接对象:设置连接参数。四个连接参数:driverName,url,username,password
例:
package chapter10;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class Example01 {
public static DataSource ds = null;
static {
//获取DBCP数据源实现类对象
BasicDataSource bds = new BasicDataSource();
//设置连接数据库所需要的四个连接参数
bds.setDriverClassName("com.mysql.jdbc.Driver");
bds.setUrl("jbdc:mysql://localhost:3306/jdbc");
bds.setUsername("root");
bds.setPassword(null);
//设置连接池参数
bds.setInitialSize(5); //初始化参数
bds.setMaxIdle(10);
ds = bds;
}
public static void main(String[] args) throws SQLException {
//数据库连接池获取连接对象
Connection con = ds.getConnection();
//获取连接参数
DatabaseMetaData metaData = con.getMetaData();
System.out.println(metaData.getURL());
System.out.println(metaData.getUserName());
System.out.println(metaData.getDriverName());
}
}
- BasicDataSource类的常用方法:
C3P0数据源
- C3P0数据源是目前最流行的数据库连接池技术之一,它的性能更加优越,也提供了对后期数据框架hibernate很好的支持,它是开源免费的。
- 在项目开发中,使用C3P0的基本步骤:
- 前提导入C3P0的jar包,提供了C3P0的核心类方法
- 设置连接参数:四个连接参数:driverName,url,username,password
例:
package chapter10;
import java.beans.PropertyVetoException;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Example02 {
public static DataSource ds = null;
// 初始化C3P0数据源
static {
ComboPooledDataSource cpds = new ComboPooledDataSource();
try {
// 设置四个连接参数
cpds.setDriverClass("com.mysql.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");
cpds.setUser("root");
cpds.setPassword("");
// 设置连接池参数
cpds.setInitialPoolSize(5);
cpds.setMaxPoolSize(15);
ds = cpds;
} catch (PropertyVetoException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException {
System.out.println(ds.getConnection());
}
}
- ComboPooledDataSource类常用的方法:
DBUtils工具
- DBUtils工具介绍:是由apache提供。是commons组件一员。是对jdbc简单的封装,减少操作数据库的代码。使用前,需要导入DBUtils的jar包。
QueryRunner类
- QueryRunner类是DBUtils组件下的核心类,通常和ResultSetHandler接口配合使用,对jdbc代码进行了简单的封装,减少操作数据库大代码量。
- QueryRunner类提供了集中常见的方法:
query(String,ResultSetHandler rsh,Object... params)
update(String sql,Object... params)
update(String sql)
ResultSetHandler接口
- ResultSetHandler接口用于处理ResultSet结果集,它可以将结果集中的数据转为不同的形式。
- ResultSetHandler提供了集中常见的实现类,具体如下:
转载:https://blog.csdn.net/DTRblank/article/details/106957407
查看评论