数据库连接池C3p0和Druid

数据库连接池

1. 数据库连接池 是一个容器, 容器中有若干个connection 对象, 我们可以直接来使用, 用完之后自动归还, 是一个物理数据源的工厂。

DataSource接口

1. java.sql
2. getConnection();-- 获取连接
3. 数据库连接池的实现:数据库厂商实现 C3PO , Druid 阿里巴巴提供的
4. 如果是连接池中的connnection对象, close()不再是关闭,而是归还给连接池\

## C3P0 ##

##使用c3p0的使用 ##


  1. 导入jar包
  2. 定义配置文件 名称为c3p0.properties 或者c3p0-config.xml `<c3p0-config>

<default-config> com.mysql.cj.jdbc.Driver jdbc:mysql://localhost:3306/db3?serverTimezone=UTC root root

<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">3000</property>
     </default-config>

     <named-config name="otherc3p0"> 
<!--  连接参数 -->
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/db3?serverTimezone=UTC</property>
<property name="user">root</property>
<property name="password">root</property>

<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">1000</property>
 </named-config>
</c3p0-config>`
  1. 创建连接池对象 -- ComboPooledDataSource
  2. 获取连接 == getConnecction();
  3.  

1. public class C3p0demo {
public static void main(String[] args) throws SQLException {
    //使用默认的配置
    DataSource ds = new ComboPooledDataSource();
    Connection conn = ds.getConnection();
    conn.close();
    System.out.println(conn);
    //使用自定义的配置
    ComboPooledDataSource otherc3p0 = new ComboPooledDataSource("otherc3p0");
    Connection conn2 = otherc3p0.getConnection();
    System.out.println(conn2);
    conn2.close();


}

`

使用 Druid连接池


  1. 导入jar包
  2. 定义配置文件, 可以放在任意的位置, 名称任意

     driverClassName=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/db3?serverTimezone=UTC
    username=root
    password=root
    initialSize=5
    maxActive=10
    maxWait=3000
  1. 获取数据库连接对象, 通过一个工厂类 来获取连接对象connection 对象 Druid

`public class demo { private static Connection conn = null; private static PreparedStatement preparedStatement = null; private static ResultSet resultSet = null;

public static void main(String[] args) {
    ArrayList<Person> list = new ArrayList();
    try {
        //获取连接Connecttion
        conn = JDBCUtils.getConnection();
        String sql = "select * from account";
        preparedStatement = conn.prepareStatement(sql);
        resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            //System.out.println(resultSet.getString(1));
            list.add(new Person(resultSet.getInt(1), resultSet.getString(2), resultSet.getInt(3)));
        }
        JDBCUtils.close(resultSet, preparedStatement, conn);
        list.stream().forEach(name -> System.out.println(name));
    } catch (SQLException e) {
        e.printStackTrace();
    }

}
    }

`

定义DruidJDBCUtils

`public class JDBCUtils {
private static DataSource ds = null;

//使用静态代码块加载配置文件
static {
    Properties pro = new Properties();
    InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
    try {
        pro.load(is);
        ds = DruidDataSourceFactory.createDataSource(pro);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

//获取Connection对象
public static Connection getConnection() throws SQLException {
    return ds.getConnection();
}
// 释放资源
public static void close(ResultSet resultSet, Statement stat, Connection conn) {
    if (resultSet != null) {
        try {
            resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (stat != null) {
        try {
            resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

public static void close(Statement stat, Connection conn) {
    close(null, stat, conn);
}
// 获取DataSource
public static DataSource getDataSource() {
    return ds == null ? ds : ds;
}

} `

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值