MySQL基础—06:数据库连接池

为什么要使用数据库连接池?

数据库的连接对象创建工作,比较消耗性能。 

一开始现在内存中开辟一块空间(集合) , 一开先往池子里面放置 多个连接对象。  后面需要连接的话,直接从池子里面去。不要去自己创建连接了。  使用完毕, 要记得归还连接。确保连接对象能循环利用。

 

一、DBCP

1. 导入jar包

2. 不使用配置文件

public void testDBCP01(){


    Connection conn = null;
    PreparedStatement ps = null;
    try {

        //1. 构建数据源对象
        BasicDataSource dataSource = new BasicDataSource();
        //连的是什么类型的数据库, 访问的是哪个数据库 , 用户名, 密码。。
        //jdbc:mysql://localhost/bank 主协议:子协议 ://本地/数据库
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost/bank");
        dataSource.setUsername("root");
        dataSource.setPassword("root");


        //2. 得到连接对象
        conn = dataSource.getConnection();
        String sql = "insert into account values(null , ? , ?)";
        ps = conn.prepareStatement(sql);
        ps.setString(1, "admin");
        ps.setInt(2, 1000);

        ps.executeUpdate();

    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        JDBCUtil.release(conn, ps);
    }

}

3. 使用配置文件方式

Connection conn = null;
PreparedStatement ps = null;
try {
    BasicDataSourceFactory factory = new BasicDataSourceFactory();
    Properties properties = new Properties();
    InputStream is = new FileInputStream("src//dbcpconfig.properties");
    properties.load(is);
    DataSource dataSource = factory.createDataSource(properties);

    //2. 得到连接对象
    conn = dataSource.getConnection();
    String sql = "insert into account values(null , ? , ?)";
    ps = conn.prepareStatement(sql);
    ps.setString(1, "liangchaowei");
    ps.setInt(2, 100);

    ps.executeUpdate();

} catch (Exception e) {
    e.printStackTrace();
}finally {
    JDBCUtil.release(conn, ps);
}

配置文件 dbcpconfig.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/bank
username=root
password=root
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
connectionProperties=useUnicode=true;characterEncoding=gbk
defaultAutoCommit=true
defaultTransactionIsolation=READ_UNCOMMITTED

 

 


二、C3P0

1. 拷贝jar包到lib目录下

2. 不使用配置文件

    Connection conn = null;
    PreparedStatement ps = null;
    try {
        //1. 创建datasource
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //2. 设置连接数据的信息
        dataSource.setDriverClass("com.mysql.jdbc.Driver");

        //忘记了---> 去以前的代码 ---> jdbc的文档
        dataSource.setJdbcUrl("jdbc:mysql://localhost/bank");
        dataSource.setUser("root");
        dataSource.setPassword("root");

        //2. 得到连接对象
        conn = dataSource.getConnection();
        String sql = "insert into account values(null , ? , ?)";
        ps = conn.prepareStatement(sql);
        ps.setString(1, "admi234n");
        ps.setInt(2, 103200);

        ps.executeUpdate();

    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        JDBCUtil.release(conn, ps);
    }

3. 使用配置文件(重要)

Connection conn = null;
PreparedStatement ps = null;
try {
    ComboPooledDataSource dataSource = new ComboPooledDataSource();
		
    conn = dataSource.getConnection();
    String sql = "insert into account values(null, ?, ?)";
    ps = conn.prepareStatement(sql);
    ps.setString(1, "wanghuihui");
    ps.setInt(2, 5211314);
		
    ps.executeUpdate();
} catch (Exception e) {
    e.printStackTrace();
}finally{
    JDBCUtil.release(conn, ps);
}

c3p0-config.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost/bank</property>
    <property name="user">root</property>
    <property name="password">root</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>
</c3p0-config>

 


三、Druid

  1. 充当数据库连接池。
  2. 可以监控数据库访问性能
  3. 获得SQL执行日志

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值