2.DBCP问题:连接池是什么,有什么用? 连接池:就是创建一个容器,用于装入多个Connection对象,在使用连接对象时,从容器中获取一个Connection,使用完成后,在将这个Connection重新装入到容器中。这个容器就是连接池(DataSource)也叫做数据源.
我们可以通过连接池获取连接对象. 优点: 节省创建连接与释放连接 性能消耗 ---- 连接池中连接起到复用的作用 ,提高程序性能. 思考: 连接资源宝贵,需要对连接管理,程序中连接如何管理? 分析: 涉及频繁的连接的打开、关闭,影响程序的运行效率! 连接管理: 预先创建一组连接,用的时候每次取出一个; 用完后,放回;
2.1 dbcp.propertiesdbcp连接池:
1. DBCP 是 Apache 软件基金组织下的开源连接池实现,Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用
2. 使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件: Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库
3. 核心类:org.apache.commons.dbcp.BasicDataSource
获取方式 使用核心类:new BasicDataSource()//硬编码,Properties
username = root password = root url = jdbc:mysql:///java2107 driverClassName = com.mysql.jdbc.Driver #最大连接数 maxActive = 10 #初始容量 initialSize = 52.2测试类
package com.qf.jdbc;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DbcpDemo {
//1.硬编码方式
@Test
public void test1()throws Exception{
//1.获取连接池对象
BasicDataSource basicDataSource = new BasicDataSource();
//2.设置连接的配置
basicDataSource.setUsername("root");
basicDataSource.setPassword("root");
basicDataSource.setUrl("jdbc:mysql://localhost:3306/java2107");
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setMaxActive(10);//最大连接数
basicDataSource.setInitialSize(5);//初始化连接数
//获取连接
Connection connection = basicDataSource.getConnection();
System.out.println(connection);
}
//2.properties文件加载方式
@Test
public void test2()throws Exception{
//加载配置文件
InputStream resourceAsStream = DbcpDemo.class.getResourceAsStream("/dbcp.properties");
//创建Properties
Properties properties = new Properties();
//加载
properties.load(resourceAsStream);
//获取连接池对象
DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
//获取连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
3.C3p0
3.1 c3p0-config.xmlc3p0连接池: 1. C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate、Spring等。 2. 引入jar文件: c3p0-0.9.1.2.jar
3. 核心类:com.mchange.v2.c3p0.ComboPooledDataSource
获取方式 使用核心类:new ComboPooledDataSource()//硬编码,Properties,xml
3.2 测试类 jdbc:mysql://localhost:3306/java2107 com.mysql.jdbc.Driver root root 3 6 1000 jdbc:oracle:thin:localhost:port:1521 oracle.jdbc.driver.OracleDriver root root 3 6 1000
package com.qf.jdbc;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import java.sql.Connection;
public class C3p0Demo {
//1.硬编码方式
@Test
public void test1()throws Exception{
//创建连接池对象
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
comboPooledDataSource.setUser("root");
comboPooledDataSource.setPassword("root");
comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/java2107");
comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
//获取连接
Connection connection = comboPooledDataSource.getConnection();
System.out.println(connection);
}
//2.使用xml方式
@Test
public void test2()throws Exception{
//系统会识别名为c3p0-config.xml的文件
//使用的是无参构造器创建连接池对象,使用的是默认配置
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
Connection connection = comboPooledDataSource.getConnection();
System.out.println(connection);
}
//2.使用xml方式
@Test
public void test3()throws Exception{
//系统会识别名为c3p0-config.xml的文件
//使用的是有参构造器创建连接池对象,使用的是指定配置
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("oracle_config");
Connection connection = comboPooledDataSource.getConnection();
System.out.println(connection);
}
}
4.Druid
4.1 druid.propertiesdruid:
1. 阿里出品,淘宝与支付宝专用的数据库连接池 2. 引入jar文件: druid-1.0.9.jar3. 核心类:com.alibaba.druid.pool.DruidDataSource
获取方式 使用工厂类:DruidDataSourceFactory.createDataSource(Properties pro)
username = root password = root url = jdbc:mysql:///java2107 driverClassName = com.mysql.jdbc.Driver #最大连接数 maxActive = 10 #初始容量 initialSize = 54.2 测试类
package com.qf.jdbc;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.Test;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo {
@Test
public void test1()throws Exception{
//加载配置文件
InputStream resourceAsStream = DruidDemo.class.getResourceAsStream("/druid.properties");
//创建Properties
Properties properties = new Properties();
//加载
properties.load(resourceAsStream);
//使用工厂创建
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//获取连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}



