JDBC---Four(Druid连接池的基本使用及Druid连接池的工具类)

数据库连接池基本概念

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

Druid连接池的基本使用

①导入jar包

mysql驱动jar包以及druid连接池jar包

②定义配置文件
#druid.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/duobiaochaxun ? serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false
username=root
password=123321
#初始化连接数量
initialSize=5
#最大连接数
maxActive=10
#最大等待时间
maxWait=3000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false

有关druid配置文件参数详解,可参考下面博客:
https://blog.csdn.net/weixin_42323802/article/details/82726267

③加载配置文件
//1、利用properties对象来读取文件 创建properties对象
Properties pp = new Properties();

//2、获取src路径下的文件的方式 --->  classLoader类加载器
ClassLoader classLoader = Demotest.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("druid.properties");

//3、调用properties对象的load方法来将properties文件加载进内存
pp.load(is);
④获取连接池对象

通过工厂类的方法来获取 DruidDataSourceFactory类的createDataSource方法
传入参数:Properties properties
因此将properties配置文件加载进内存后,传给createDataSource方法

//获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(pp);
⑤获取数据库连接对象
//获取数据库连接对象
Connection conn = ds.getConnection();  
⑥获取到数据库连接对象后,其余使用方法同普通jdbc相同

定义SQL语句
获取执行SQL语句对象
执行SQL
处理结果

⑦资源释放

除释放ResultSet rs, Statement stmt外,如果连接对象Connection 是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接。

代码实现:

package druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Properties;
 
public class Demo01 {
    public static void main(String[] args) throws Exception {

        //加载properties配置文件
        Properties pp = new Properties();
        ClassLoader classLoader = Demo01.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("druid.properties");
        pp.load(is);
        //获取连接池对象
        DataSource ds = DruidDataSourceFactory.createDataSource(pp);

        //获取数据库连接对象
        Connection conn = ds.getConnection();
        //定义SQL语句
        String sql = "update account set balance = 500 where id = 1";
        //获取执行SQL对象
        Statement stmt = conn.createStatement();
        //执行SQL
        //返回的是SQL语句执行影响的行数
        int count = stmt.executeUpdate(sql);
        //处理结果
        System.out.println(count);
        //释放资源 归还连接
        stmt.close();
        conn.close();
    }
}

Druid连接池的工具类

每当用到Druid连接池,那么加载配置文件,获取连接池对象,获取数据库连接对象,释放资源,这些都是一些必须要做的工作,因此抽取成为工具类,配合Druid.properties,实现工具类的高可用性。

(可参考:JDBC的工具类JdbcUtils及配置文件jdbc.properties
https://blog.csdn.net/weixin_43402591/article/details/105640971

①加载配置文件获取连接池对象
private static DataSource ds;
    static {
        try {
            //加载properties配置文件
            Properties pp = new Properties();
            ClassLoader classLoader = Demo01.class.getClassLoader();
            InputStream is = classLoader.getResourceAsStream("druid.properties");
            pp.load(is);
            //获取连接池对象
            ds = DruidDataSourceFactory.createDataSource(pp);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
②工具类中方法的创建

获取连接池对象方法
获取数据库连接对象
释放资源归还连接(释放资源又分为有没有ResultSet结果集对象的情况,因此释放资源的方法需要方法重载。)

    //获取连接池对象
    public static DataSource getDatasource()  {
        return  ds;
    }

    //获取数据库连接对象
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }


    //关闭资源
    public static void close(Statement stmt,Connection conn){
        close(null,stmt,conn);
    }

    public static void close(ResultSet rs, Statement stmt,Connection conn){
        if (stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
druid工具类代码
package druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class jdbcUtils {

    private static DataSource ds;
    static {
        try {
            //加载properties配置文件
            Properties pp = new Properties();
            ClassLoader classLoader = Demo01.class.getClassLoader();
            InputStream is = classLoader.getResourceAsStream("druid.properties");
            pp.load(is);
            //获取连接池对象
            ds = DruidDataSourceFactory.createDataSource(pp);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    //获取连接池对象
    public static DataSource getDatasource()  {
        return  ds;
    }

    //获取连接对象
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }


    //关闭资源
    public static void close(Statement stmt,Connection conn){
        close(null,stmt,conn);
    }

    public static void close(ResultSet rs, Statement stmt,Connection conn){
        if (stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }




}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值