c3p0数据库连接池


定义

C3P0是一个开源的JDBC连接池,它实现了数据源与JNDI绑定,支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象。即将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池(Connection
pool)。

准备

准备以下的依赖架包(加主页微信领取)

使用

一.   在项目的src(一定要在src下面)下面创建一个c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <!-- 数据库驱动名 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <!-- 数据库的url -->
        <!-- 在 xml 文件中,& 符号需要进行转义,使用 &amp; 来代替 & -->
        <property name="jdbcUrl">JDBC:mysql://localhost:3306/user</property>
        <property name="user">root</property>
        <property name="password">12345678</property>
        <!--初始化连接数,取值应在minPoolSize与maxPoolSize之间 -->
        <property name="initialPoolSize">20</property>
        <!--当连接池中的连接耗尽的时候 c3p0 一次同时获取的连接数 -->
        <property name="acquireIncrement">5</property>
        <!-- 设置最小连接数,当连接池还有2个的时候,就开始申请连接数-->
        <property name="minPoolSize">2</property>
        <!-- 设置最大连接数,最多只能有 40 个连接-->
        <property name="maxPoolSize">40</property>
        <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
        <property name="acquireRetryAttempts">30</property>
        <!--两次连接中间隔时间,单位毫秒。Default: 1000 -->
        <property name="acquireRetryDelay">1000</property>
        <!--连接关闭时默认将所有未提交的操作回滚。Default: false -->
        <property name="autoCommitOnClose">false</property>
        <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
        <property name="idleConnectionTestPeriod">0</property>
        <!-- 连接超时时间, default: 0。如果是0,表示无限等待 -->
        <property name="checkoutTimeout">0</property>
    </default-config>

    <named-config name="user">
        <!-- 数据库驱动名 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <!-- 数据库的url -->
        <!-- 在 xml 文件中,& 符号需要进行转义,使用 &amp; 来代替 & -->
        <property name="jdbcUrl">JDBC:mysql://localhost:3306/user</property>
        <property name="user">root</property>
        <property name="password">12345678</property>
        <!--初始化连接数,取值应在minPoolSize与maxPoolSize之间 -->
        <property name="initialPoolSize">20</property>
        <!--当连接池中的连接耗尽的时候 c3p0 一次同时获取的连接数 -->
        <property name="acquireIncrement">5</property>
        <!-- 设置最小连接数,当连接池还有2个的时候,就开始申请连接数-->
        <property name="minPoolSize">2</property>
        <!-- 设置最大连接数,最多只能有 40 个连接-->
        <property name="maxPoolSize">40</property>
        <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
        <property name="acquireRetryAttempts">30</property>
        <!--两次连接中间隔时间,单位毫秒。Default: 1000 -->
        <property name="acquireRetryDelay">1000</property>
        <!--连接关闭时默认将所有未提交的操作回滚。Default: false -->
        <property name="autoCommitOnClose">false</property>
        <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
        <property name="idleConnectionTestPeriod">0</property>
        <!-- 连接超时时间, default: 0。如果是0,表示无限等待 -->
        <property name="checkoutTimeout">0</property>
    </named-config>
</c3p0-config>

二.    创建一个jsp用于用户输入信息

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>
<form method="post" action="jdbc">
    <label>
        <input type="text" name="user" placeholder="用户名"><br>
    </label>
    <label>
        <input type="password" name="password" placeholder="密码"><br>
    </label>
    <input type="submit" value="提交">
</form>
</body>
</html>

三.   创建一个名为User的JAVABEAN

public class User {
    private  String name;
    private  String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

四.   创建一个名为Datatext的类处理数据库

import com.mchange.v2.c3p0.ComboPooledDataSource;

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

public class Datatext {
    // 获取连接池对象
    ComboPooledDataSource dataSource=new ComboPooledDataSource();

    public  ComboPooledDataSource getDataSource() {

        return dataSource;
    }
    public  int install(User user) throws SQLException {
        // 获取连接
        Connection connection = getDataSource().getConnection();
       //sql语句
        String sql="insert into users(name,password) values(?,?) ";
        //向数据库发送sql语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //sql语句中用了占位符,对占位符赋值
        preparedStatement.setString(1,user.getName());
        preparedStatement.setString(2,user.getPassword());
        //执行sql语句
        int i = preparedStatement.executeUpdate();
        return i;
    }
}

五.   创建一个名为Demos的Servlet用于处理数据和流程控制

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;

@WebServlet("/jdbc")
public class Demos extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取用户输入的用户名
        String user = req.getParameter("user");
        //获取用户输入的密码
        String password = req.getParameter("password");
        //实例化JAVABEAN将名字和密码存入其中
        User user1=new User();
        user1.setName(user);
        user1.setPassword(password);
        //执行数据库处理类
        Datatext datatext=new Datatext();
        try {
           resp.getWriter().println(datatext.install(user1));
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }
}

文章作者: Esther
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Esther !
  目录