一、数据库连接池(数据源)
1.数据库连接池是什么
数据库连接池是为了避免“反复创建和关闭连接数据库对象Connection”,提高程序效率而设计的一种负责“分配”、“管理”、“关闭”数据库连接对象的池技术。
工作逻辑是在数据库连接池初始化时,会建立指定个数据库连接对象。当外界申请使用数据库连接对象时,会先检查是否有空闲连接对象若有(&&连接池中使用的连接对象数目<最大活跃连接对象数目&&最小空闲连接对象数目>连接池中空闲连接对象数目)就返回给其使用,否则等待;若没有(连接时中所有连接对象数目<最大闲置连接对象数目&&连接池中使用的连接对象数目<最大活跃连接对象数目)则新建;否则等待。使用完后将连接对象回收到数据库连接池中,数据库连接池关闭时会释放所有连接对象资源。
数据库连接池中,最小连接闲置对象数目<=连接对象数目<=最大闲置连接对象数目
2.数据库连接池的相关实现接口与类
3.数据库连接池的实现
>DBCP数据库连接池
共同前提:在WEB-INF文件夹下的lib文件夹下,放上mysql-connector-java-8.0.19.jar、commons-dbcp2-2.8.0.jar、commons-logging-1.2.jar、commons-pool2-2.9.0.jar包(若自己去网上下载,注意一下版本匹配问题)
(1)直接配置数据库连接池
package
(2)配置文件配置数据库连接池
/* a.properties配置文件
格式:属性=属性值*/
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC
username=root
password=123456
initialSize=5
maxTotal=5
/* 测试类*/
package Test;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
public class DBCPTest2 {
public static DataSource ds = null;
static{
Properties property = new Properties();
try{
InputStream in = new DBCPTest2().getClass().getClassLoader().getResourceAsStream("a.properties");
property.load(in);
ds = BasicDataSourceFactory.createDataSource(property);
}catch(Exception e){
throw new ExceptionInInitializerError(e);
}
}
public static void main(String[] args) throws SQLException {
Connection con = ds.getConnection();
// 自己定义对数据库的操作
}
}
>C3P0数据库连接池
共同前提:在WEB-INF文件夹下的lib文件夹下,放上mysql-connector-java-8.0.19.jar、c3p0-0.9.2.1.jar、mchange-commons-java-0.2.3.4.jar(若自己去网上下载,注意一下版本匹配问题)
(1)直接配置数据库连接池
package Test;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Test{
public static ComboPooledDataSource cpds = null;
static{
cpds = new ComboPooledDataSource();
// 配置数据库连接信息
cpds.setDriverClass("com.mysql.cj.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC");
cpds.setUser("root");
cpds.setPassword("123456");
// 配置数据库连接池的相关属性
bds.setInitialPoolSize(8);
bds.setMaxPoolSize(10);
}
public static void main(String[] args) throws SQLException {
Connection con = cpds.getConnection();
// 自己定义对数据库的操作
}
}
(2)配置文件配置数据库连接池
/* c3p0-config.xml 配置文件(注意名字必须是这个)
*/
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认数据库连接池配置 -->
<default-config>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">8</property>
<property name="maxPoolSize">10</property>
</default-config>
<!-- 自定义数据库连接池配置,通过named-config标签的name属性来使用,具体见测试类 -->
<named-config name="myCP03">
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">16</property>
<property name="maxPoolSize">20</property>
</named-config>
</c3p0-config>
/* 测试类*/
package Test;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Test2 {
public static ComboPooledDataSource cpds = null;
static{
// 如果不给参数,用的是默认配置
cpds = new ComboPooledDataSource("myCP03");
}
public static void main(String[] args) throws SQLException {
Connection con = cpds.getConnection();
// 自己定义对数据库的操作
}
}
二、DBUtils工具
1.相关类/接口的方法
2.使用前提
>导入mysql-connector-java-8.0.19.jar
>导入c3p0-0.9.2.1.jar、mchange-commons-java-0.2.3.4.jar
>导入commons-dbutils-1.7.jar
资源分享
1.mysql-connector-java-8.0.19.jar
链接:https://pan.baidu.com/s/1v8n5T-OlbSlAgBUls_zFdg
提取码:8z3w
2.DBCP数据库连接池相关jar包
链接:https://pan.baidu.com/s/1tdcsp61RIVPk60eK03NF8g
提取码:0u7u
3.C3P0数据库连接池相关jar包
链接:https://pan.baidu.com/s/1N-kw0acMpev93coiyhoSkQ
提取码:6m6u
4.commons-dbutils-1.7.jar
链接:https://pan.baidu.com/s/1ih-Ri2wmCbgo92jHsQLUIw
提取码:x6kv