【JDBC笔记】第三方连接池:DBCP/C3P0

JDBC第三方连接连接池

一.连接池

1.概述:

管理数据库的连接.存放多个连接对象的容器,因为,我们没获取一次连接对象,底层会很耗费资源,那连接池,能够高效的管理连接对象。

2.作用:

提高项目的性能.
在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.

3.常见连接池:

DBCP
C3P0

二.DBCP

1.概述:

DBCP(DataBase connection pool) 数据库连接池。
是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。
单独使用dbcp需要2个包:commons-dbcp.jar和commons-pool.jar
由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

2.使用步骤:

a.导入jar包(commons-dbcp.jar和commons-pool.jar)

b.配置文件的方式/硬编码模式(不推荐)

3.代码:

a.硬编码方式:

1.硬编码的方式
创建对象
BasicDataSource ds = new BasicDataSource();
//设置参数
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql:///mydemo");
ds.setUsername("root");
ds.setPassword("123456");
//获取预编译对象
Connection conn = ds.getConnection();
String sql="insert into user values(?,?)";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setNull(1,Types.INTEGER);
statement.setString(2,"王五");
statement.executeUpdate();
ds.close();

b.配置文件方式:

配置文件:

#连接基本设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day39
username=root
password=root
#<!--扩展配置 了解-->
#初始化连接
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000

#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=gbk

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

Java代码:

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Types;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DBCPDemo {
	public static void main(String[] args) throws Exception{
		//表 id 设置 primary key auto_increment 
		Properties p = new Properties();
		p.load(new FileInputStream("src/dbcp.properties"));
		DataSource bdsf = BasicDataSourceFactory.createDataSource(p);
		Connection c = bdsf.getConnection();
		String sql="insert into users3 values(?,?)";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setNull(1, Types.INTEGER);
		ps.setString(2, "Ying");
		ps.executeUpdate();	
	}
}

三.C3P0

1.概述:

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

2.C3P0和DBCP的区别:

  • dbcp没有自动回收空闲连接的功能
  • c3p0有自动回收空闲连接功能

3.代码:

a.硬编码方式:

//创建对象
ComboPooledDataSource ds = new ComboPooledDataSource();
//设置参数
ds.setJdbcUrl("");
ds.setDriverClass("");
ds.setUser("");
ds.setPassword("");
//获取连接对象
Connection conn = ds.getConnection();
PreparedStatement statement = conn.prepareStatement("");
//执行
statement.executeUpdate();




b.配置文件方式:

注意:

    • 配置文件的文件名和后缀名固定的 c3p0.properties
    • 必须放在src目录下

配置文件:

xml:

<c3p0-config>
	<!-- 默认配置,如果没有指定则使用这个配置 -->
	<default-config>
		<!-- 基本配置 -->
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/day39</property>
		<property name="user">root</property>
		<property name="password">root</property>
	
		<!--扩展配置-->
		<property name="checkoutTimeout">30000</property>
		<property name="idleConnectionTestPeriod">30</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
	</default-config> 
	
	
	<!-- 命名的配置 -->
	<named-config name="yangfan">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/day39</property>
		<property name="user">root</property>
		<property name="password">root</property>
		
		
		<!-- 如果池中数据连接不够时一次增长多少个 -->
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">20</property>
		<property name="minPoolSize">10</property>
		<property name="maxPoolSize">40</property>
		<property name="maxStatements">20</property>
		<property name="maxStatementsPerConnection">5</property>
	</named-config>
</c3p0-config> 

properties:

c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///day39
c3p0.user=root
c3p0.password=root


java:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Demo {
	public static void main(String[] args) throws SQLException {
	//	ComboPooledDataSource ds = new ComboPooledDataSource();
	//	使用xml配置文件中的第二配置 参数是你的第二配置名称
		ComboPooledDataSource cpds = new ComboPooledDataSource();
	//	ComboPooledDataSource cpds = new ComboPooledDataSource("yangfan");
		Connection c = cpds.getConnection();
		String sql ="insert into users4 values(?,?)";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setNull(1, Types.INTEGER);
		ps.setString(2, "Ash");
		ps.executeUpdate();
		cpds.close();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值