DBCP数据库连接池

DBCP

一、前言

DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。

二、DBCP使用

2.1、前期准备

2.1.1、添加依赖
<!--JDBC-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

<!--DBCP-->
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>commons-pool</groupId>
    <artifactId>commons-pool</artifactId>
    <version>1.6</version>
</dependency>
2.1.2、数据库建表
#创建测试数据库
CREATE DATABASE test1;
USE test1;  
#创建需要的数据表
create table category(
    cid varchar(20) primary key,
    cname varchar(20)
);

2.2、硬编码(不推荐)

硬编码指的是直接在代码里面设置,不利于将来项目的维护

import org.apache.commons.dbcp.BasicDataSource;

import java.sql.*;

public class DBCPDemo {
    public static void main(String []args) throws SQLException {
        //创建连接池
        BasicDataSource ds = new BasicDataSource();
        //配置信息
        //注意:mysql-connector-java 6要使用:com.mysql.cj.jdbc.Driver
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://ip:3306/test1?userUnicode=true&characterEncoding=utf-8&useSSL=false");
        ds.setUsername("数据库用户");
        ds.setPassword("数据库用户对应的密码");

        //获取连接
        Connection conn = ds.getConnection();
        String sql = "insert into category values(?, ?);";
        PreparedStatement st = conn.prepareStatement(sql);

        //设置参数
        st.setString(1, "c001");
        st.setString(2, "C语言");

        int i = st.executeUpdate();
        System.out.println("执行影响数据:"+i);

        closeResource(conn, st, null);
    }
    //释放资源
    public static void closeResource(Connection conn, Statement st, ResultSet rs){
        //释放连接
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
        //释放语句执行者
        if(st != null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            st = null;
        }
        //释放结果集
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
    }
}

2.3、配置文件(推荐)

主要将数据库驱动、url、用户名、密码等一些相关信息写入到配置文件中,程序在通过读取配置文件自动加载配置

2.3.1、配置文件

配置文件一般存放在Resources文件夹下

dbcp.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://数据库服务器ip:3306/test1?userUnicode=true&characterEncoding=utf-8&useSSL=false
username=用户名
password=密码
2.3.2、java代码
import org.apache.commons.dbcp.BasicDataSourceFactory;

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

public class DBCPDemo {
    public static void main(String []args) throws Exception {
        //获取配置文件输入流
        InputStream is = Thread.currentThread().getContextClassLoader().getSystemResourceAsStream("dbcp.properties");

        Properties prop = new Properties();
        prop.load(is);
        String driverClassName = prop.getProperty("driverClassName");
        String url = prop.getProperty("url");
        String username = prop.getProperty("username");
        String password = prop.getProperty("password");

        //创建连接池
        DataSource ds = new BasicDataSourceFactory().createDataSource(prop);
        //获取连接
        Connection conn = ds.getConnection();
        //创建SQL
        String sql = "insert into category values(?,?);";
        //创建SQL语句执行者
        PreparedStatement st = conn.prepareStatement(sql);
        st.setString(1, "c002");
        st.setString(2, "C++语言");

        //执行SQL
        int i = st.executeUpdate();
        System.out.println("执行影响数据:"+i);
        closeResource(conn, st, null);
    }
    //释放资源
    public static void closeResource(Connection conn, Statement st, ResultSet rs){
        //释放连接
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
        //释放语句执行者
        if(st != null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            st = null;
        }
        //释放结果集
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
    }
}

参考:

百度百科DBCP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值