连接池

连接池:

  管理数据库的连接

  作用:提高项目的性能

    就是在连接池初始化时,存入一定数量的连接,用的时候通过方法获取,不用的时候归还即可

    所有的连接池必须实现一个接口,javax.sql.DataSource接口

  获取连接的方法:

    Connection getConnection()

  归还连接的方法就是释放资源的方法

    调用connection.close()

  增强方法

    1.继承

    2.动态代理

    3.装饰者模式(静态代理)

      使用步骤:

        1.装饰者和被装饰者实现同一接口或者继承同一类

        2.装饰者中要有被装饰者的引用

        3.对需要增强的方法进行加强

        4.对不需要加强的方法调用原来方法

//接口Car
public interface Car {
    void run();
    void stop();
}

//QQ 被装饰者 实现同一接口Car
public class QQ implements Car {
    public void run(){
        System.out.println("QQ  run");
    }

    @Override
    public void stop() {
        System.out.println("QQ stop");
    }
}
//CarWarp 装饰者   实现同一接口Car
public class CarWarp  implements Car{
    //通过构造器将Car引用
    private Car car;
    public CarWarp(Car car){
        this.car = car;
    }
    //对需要增强的方法进行增强
    @Override
    public void run() {
        System.out.println("改装");
        System.out.println("5s破百");
    }
    //不需要的方法调用原来方法
    @Override
    public void stop() {
        System.out.println("QQ stop");
    }
}
//Test测试类
public class Test {
    public static void main(String[] args) {
        QQ qq = new QQ();
        /*qq.run();
        qq.stop();*/

        CarWarp carWarp = new CarWarp(qq);
        carWarp.run();
        carWarp.stop();
    }
}

  自定义一个连接池:

工具类JdbcUtils
装饰者ConnectionWarp
简易连接池MyDataSource
测试类

  常用的连接池:

    DBCP:

      apache组织

      使用步骤:

        1.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)

        2.使用api

          a.硬编码

import com.company.utils.JdbcUtils;
import javafx.application.Application;
import javafx.stage.Stage;
import org.apache.commons.dbcp.BasicDataSource;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;

public class DBCPDemo{
    @Test
    //硬编译
    public void f1() throws Exception{
        //创建连接池
        BasicDataSource ds = new BasicDataSource();
        //配置信息
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql:///day07");//若为本地localhost可用/省略
        ds.setUsername("root");
        ds.setPassword("123456");

        Connection con = ds.getConnection();
        String sql = "insert into category values(?,?)";
        PreparedStatement st = con.prepareStatement(sql);

        //设置参数
        st.setString(1,"c020");
        st.setString(2,"数码");

        int i = st.executeUpdate();
        System.out.println(i);
        //释放资源
        JdbcUtils.closeResource(con,st,null);
    }

}
硬编译

          b.配置文件

import com.company.utils.JdbcUtils;
import javafx.application.Application;
import javafx.stage.Stage;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Properties;

public class DBCPDemo{
    @Test
    //硬编译
    public void f2() throws Exception{
        //存放配置文件
        Properties prop = new Properties();
        //io流读取
        prop.load(new FileInputStream("src/dbcp.properties"));
        //创建连接池
        DataSource ds = new BasicDataSourceFactory().createDataSource(prop);

        Connection con = ds.getConnection();
        String sql = "insert into category values(?,?)";
        PreparedStatement st = con.prepareStatement(sql);

        //设置参数
        st.setString(1,"c022");
        st.setString(2,"数码");

        int i = st.executeUpdate();
        System.out.println(i);
        //释放资源
        JdbcUtils.closeResource(con,st,null);
    }

}
使用配置文件

    C3P0:

      有自动回收空闲连接的功能

      使用步骤:

        1.导入jar包(c3p0-0.9.1.2.jar)

        2.使用api

          a.硬编码(不推荐)

            new ComboPooledDataSource()

import com.company.utils.JdbcUtils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;

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

public class C3p0Demo {
    @Test
    //硬编码
    public void f1() throws Exception {
        ComboPooledDataSource ds = new ComboPooledDataSource();
        //设置基本参数
        ds.setDriverClass("com.mysql.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mysql:///day07");
        ds.setUser("root");
        ds.setPassword("123456");
        Connection con = ds.getConnection();
        String sql = "insert into category values(?,?)";
        PreparedStatement st = con.prepareStatement(sql);

        //设置参数
        st.setString(1,"c023");
        st.setString(2,"野生");

        int i = st.executeUpdate();
        System.out.println(i);
        //释放资源
        JdbcUtils.closeResource(con,st,null);
    }
}
硬编码

          b.配置文件

            配置文件的名称:c3p0.properties 或 c3p0-config.xml

       

<c3p0-config>
    <!-- 默认配置,如果没有指定则使用这个配置 -->
    <default-config>
        <!-- 基本配置 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/day07</property>
        <property name="user">root</property>
        <property name="password">123456</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="yisen">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/day07</property>
        <property name="user">root</property>
        <property name="password">123456</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> 
c3p0-config.xml

            配置文件路径:src下

            编码只需一句话

              new ComboPooledDataSource();//使用默认的配置

              new ComboPooledDataSource(String configName);//使用命名的配置,若配置名未找到,则使用默认配置

import com.company.utils.JdbcUtils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;

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

public class C3p0Demo {
    @Test
    //硬编码
    public void f1() throws Exception {
        ComboPooledDataSource ds = new ComboPooledDataSource("yisen");

        Connection con = ds.getConnection();
        String sql = "insert into category values(?,?)";
        PreparedStatement st = con.prepareStatement(sql);

        //设置参数
        st.setString(1,"c028");
        st.setString(2,"解药");

        int i = st.executeUpdate();
        System.out.println(i);
        //释放资源
        JdbcUtils.closeResource(con,st,null);
    }
}
使用配置文件

 

posted @ 2020-07-26 19:45  Yisennnn丶  阅读(141)  评论(0)    收藏  举报