数据库连接池的概念:

其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

步骤:

1. 需要的依赖,导入jar包

c3p0-0.9.5.2.jar
mchange-commons-java-0.2.12.jar
mysql-connector-java-5.1.47.jar

2.在类路径下建立c3p0-config.xml

它是数据库连接池的配置文件,内容如下

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置,如果没有指定则使用这个配置 -->
    <default-config>
        <property name="user">root</property>
        <property name="password">123456</property>
        <property name="jdbcUrl">jdbc:mysql:///blog?useSSL=false</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!--  当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。-->
        <property name="checkoutTimeout">30000</property>
        <!--  每个几秒检查所有连接池中的空闲连接-->
        <property name="idleConnectionTestPeriod">30</property>
        <!-- 初始化数据库连接池时连接的数量 -->
        <property name="initialPoolSize">3</property>
        <!-- 接的最大空闲时间,如果超过这个时间,某个数据库连接还没有被使用,则会断开掉这个连接如果为0,则永远不会断开连接-->
        <property name="maxIdleTime">30</property>
        <!-- 数据库连接池中的最大的数据库连接数 -->
        <property name="maxPoolSize">100</property>
        <!-- 数据库连接池中的最小的数据库连接数 -->
        <property name="minPoolSize">2</property>
        <!-- JDBC的标准参数,用以控制数据源内加载d的PreparedStatements数量-->
        <property name="maxStatements">200</property>
    </default-config>
</c3p0-config>

编写代码

使用数据库连接池,除了获取数据库连接与之前不一样,其他操作没什么区别

public class Main {
    public static void main(String[] args) throws SQLException {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        Connection connection = comboPooledDataSource.getConnection();
        String sql = "select * from blog.user";
        Statement stmt = connection.createStatement();
        ResultSet resultSet = stmt.executeQuery(sql);
        List<User> list = new ArrayList<User>();
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String username = resultSet.getString("username");
            String password = resultSet.getString("password");
            list.add(new User(id, username, password));
        }
        for (User user : list) {
            System.out.println(user);
        }
        stmt.close();
        connection.close();
    }
}
class User {
    private Integer id;
    private String username;
    private String password;

    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐