首页 > 数据库技术 > 详细

数据库连接池DBCP使用方式

时间:2021-01-24 01:11:27      阅读:21      评论:0      收藏:0      [点我收藏+]

数据库连接池DBCP使用方式

概念

开源数据源实现,使用这些数据库连接池后,我们在项目开发中就不需要编写连接数据库的代码了。

开源数据源包含DBCP、C3P0、Druid等

DBCP Java使用实例:

说在前面

dbcp其实是对连接数据库的方式进行了优化,对于非数据库连接池的连接方式,参考我另一篇博客:https://www.cnblogs.com/ruoleecc/p/14317799.html

1.准备jar包

commons-dbcp2-2.1.1.jar、commons-pool2-2.9.0.jar

2.添加dbcp properties配置文件

最关键的是连接设置,将数据库的信息修改为自己的数据库。其余配置可以根据实际情况修改,也可不修改。

注意点:配置文件中参数名不能修改,因为dbcp代码中需要去获取这些参数的配置。

配置文件:mysql-dbcp.properties

#连接设置
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/cclearn?useSSL=true&characterEncoding=utf8&useUnicode=true&serverTimezone=UTC
username=root
password=tester

#<!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000


#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=gbk

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

3.编写jdbc工具类

jdbc工具类文件:JdbcUtils.Java

首先附上未使用池化技术的Jdbc工具类:

package com.cc.mysql_learn;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JdbcUtils {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    static{//写在静态代码块中,类被加载的时候就运行了,只运行一次,优先于各种代码块以及构造函数
        try{
            Properties properties = new Properties();
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("mysql.properties");
            properties.load(in);//加载mysql.properties文件

            driver = properties.getProperty("driver");//获取mysql.properties的信息
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");

            Class.forName(driver);//加载驱动
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws ClassNotFoundException, SQLException {
        return DriverManager.getConnection(url,username,password);//返回连接对象
    }

    public static void closeConnection(Connection connection, PreparedStatement preparedStatement, ResultSet rs) throws SQLException {
        //依次释放
        if(rs != null){
            rs.close();
        }
        if(preparedStatement != null){
            preparedStatement.close();
        }
        if(connection != null){
            connection.close();
        }
    }
}

以下是使用DBCP的Jdbc工具类,可以看到,加载驱动及获取数据库连接的功能都被BasicDataSourceFactory创建出来的对象下的getConnection()方法实现了。

package com.cc.mysql_learn;

import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JdbcUtils {
    static BasicDataSource dataSource;
    static{
        try{
            //通过InputStream方式服务properties配置文件
            Properties properties = new Properties();
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("mysql-dbcp.properties");
            properties.load(in);
            dataSource = BasicDataSourceFactory.createDataSource(properties);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws ClassNotFoundException, SQLException {
        return dataSource.getConnection();
    }

    public static void closeConnection(Connection connection, PreparedStatement preparedStatement, ResultSet rs) throws SQLException {
        if(rs != null){
            rs.close();
        }
        if(preparedStatement != null){
            preparedStatement.close();
        }
        if(connection != null){
            connection.close();
        }
    }
}

4.编写主要业务代码

可以看到,在业务层面创建和销毁数据库连接的代码不需要有任何改变,因为改动都在JdbcUtils.Java工具类中。

package com.cc.mysql_learn;

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

public class MysqlOptimization {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Connection connection = JdbcUtils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("select * from users;");
        ResultSet rs = preparedStatement.executeQuery();
        if(rs.next()){
            System.out.println(rs.getObject("user_name"));
        }
        JdbcUtils.closeConnection(connection,preparedStatement,rs);
    }
}

数据库连接池DBCP使用方式

原文:https://www.cnblogs.com/ruoleecc/p/14318383.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!