jsp_连接池

1: 连接池(DBCP与C3p0)
    1): 之前的连接操作
        拿到一个连接--->执行sql进行数据操作--->关闭连接
        ps: 这样的话存在一些缺点的,比如每拿到一个连接用完后则就把这个连接关闭了,这很浪费,毕竟拿到一个连接等是需要时间的
            这样也不能很好的对连接数进行控制 ,如果连接数过多的话,则可能会有内存泄漏服务器崩溃
    2): 连接池
        连接池则在创建一个数据库连接的缓冲池,在这个缓冲池创建时则可以在里边初始化一定的连接数,如需要获取连接时,则只需要到这个缓冲池中获取就行,
        且用完后并不会把连接销毁,而是放回到缓冲池中,我们也可以设置同时的最大连接数等等,可以很好的避免之前连接操作的缺点
    3): DataSource接口
        对于数据库连接操作,有给我们提供了一个DataSource接口让我们来实现,
        而这个接口一般会由一些开源组织或者服务器来实现
        常用的有DBCP连接池与C3P0连接池, DataSource一般也叫数据源,也习惯把DataSource叫做连接池

2: DBCP连接池
    1): DBCP连接池使用前提
        需要导入两个jar包commons-dbcp.jar, commons-pool.jar
    2): 数据源对象
        数据源对象与数据库连接对象不同,它是产生(获取 )数据库连接对象的工厂

3: C3P0连接池
    1): 使用前提需要导入c3p0的jar包
    2): 使用

Dbcp


package com.tz.servlet.test;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory;
import org.junit.Test;

public class DbcpTest {

    /*
     * 第二种方法
     */
    @Test
    public void testDataSource2() throws Exception {

        Properties properties = new Properties();
        InputStream inStream = DbcpTest.class.getClassLoader().getResourceAsStream("db.properties");
        properties.load(inStream);

        DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);

        Connection conn = dataSource.getConnection();
        System.out.println(conn);

        BasicDataSource bds = (BasicDataSource) dataSource;
        System.out.println(bds.getInitialSize());
    }



    /*
     * 第一种方法
     */
    @Test
    public void testDataSource() throws SQLException {

        //拿到一个数据源对象
        BasicDataSource dataSource = new BasicDataSource();

        //设置连接基本属性值
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=true");
        dataSource.setUsername("root");
        dataSource.setPassword("123");

        //设置连接池中同时最大的连接数
        dataSource.setMaxActive(3);
        //设置连接池启动时创建的初始化连接数
        dataSource.setInitialSize(3);
        //设置连接池最大的等待时间  单位毫秒
        dataSource.setMaxWait(1000*4);
        //设置连接池中最小的空闲连接
        dataSource.setMinIdle(3);

        Connection conn1 = dataSource.getConnection();
        System.out.println(conn1);
        Connection conn2 = dataSource.getConnection();
        System.out.println(conn2);
        Connection conn3 = dataSource.getConnection();
        System.out.println(conn3);

        //释放连接,放回连接池中
        conn3.close();
        //Connection conn4 = dataSource.getConnection();
        //System.out.println(conn4);
    }
}

c3p0

package com.tz.servlet.test;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Test {

    private static ComboPooledDataSource pool = null;
    static {
        pool = new ComboPooledDataSource("intergalactoApp");
    }


    /*
     * 第二种方法,使用配置文件
     */
    @Test
    public void testC3p0_2() throws SQLException {

        Connection conn1 = pool.getConnection();
        System.out.println(conn1);
        Connection conn2 = pool.getConnection();
        System.out.println(conn2);
        Connection conn3 = pool.getConnection();
        System.out.println(conn3);
        Connection conn4 = pool.getConnection();
        System.out.println(conn4);
    }


    /*
     * 第一种方法
     */
    @Test
    public void testC3p0_1() throws PropertyVetoException, SQLException {

        //创建一个ComboPooledDataSource对象
        ComboPooledDataSource pool = new ComboPooledDataSource();

        //设置基本连接属性值
        pool.setDriverClass("com.mysql.jdbc.Driver");
        pool.setJdbcUrl("jdbc:mysql://localhost:3306/test?useSSL=true");
        pool.setUser("root");
        pool.setPassword("123");

        //获取连接
        Connection conn = pool.getConnection();
        System.out.println(conn);

    }

}

c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

    <named-config name="intergalactoApp">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test?useSSL=true</property>
        <property name="user">root</property>
        <property name="password">123</property>

        <!-- 设置最大的连接数 -->
        <property name="maxPoolSize">3</property>
        <!-- 设置连接池启动时创建的初始化连接数量 -->
        <property name="initialPoolSize">3</property>
        <!-- 设置最大的等待时间 -->
        <property name="checkoutTimeout">5000</property>
        <!-- 一个连接同时能够使用Statement对象个数 -->
        <property name="maxStatementsPerConnection">5</property>

    </named-config>

</c3p0-config>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值