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

来源:互联网 发布:优化发展环境讲话 编辑:程序博客网 时间:2024/06/16 08:40
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.Driverurl=jdbc:mysql://localhost:3306/day39username=rootpassword=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, SERIALIZABLEdefaultTransactionIsolation=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.Driverc3p0.jdbcUrl=jdbc:mysql:///day39c3p0.user=rootc3p0.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();}}


原创粉丝点击