Maven项目 cityFileFK03数据库连接池连接(DBCP)

数据库连接池

1. 数据库连接池与JDBC对比

连接池是数据库的技术
JDBC每个用户请求都要创建新的连接对象,使用完要销户,多用户同时访问时会频繁创建和销毁连接对象,内存销毁大;
而连接池初始化时初始化一批数据库连接对象,用完归还到连接池,实现连接对象的复用,不够创建新的一批连接对象,达到最大连接数时,等待请求释放归还到连接池中

2. 数据库连接池的使用

2.1 导包

去maven网站搜索所需的连接池,复制代码,去项目的pom.xml文件导入依赖即可

在这里插入图片描述

2.2 使用

2.2.1 配置db.properties

db.properties 下增加初始容量和最大容量

initSize = p.getProperty("db.initSize");
maxSize = p.getProperty("db.maxSize");

resources目录下db.properties

db.username=root
db.password=123456
db.url=jdbc:mysql://localhost:3306/citylifefk?characterEncoding=utf8&serverTimezone=UTC
db.driver=com.mysql.jdbc.Driver
db.initSize = 25
db.maxSize = 50

2.2.2 util目录下的DBUtil类

定义6个静态变量,加载一次即可实现共享数据

    private static  String username;
    private static  String password;
    private static  String url;
    private static  String driver;
    private static String initSize;
    private static String maxSize

创建连接池对象

private static BasicDataSource basicDataSource;

静态块内容:

			static {
    
    

        try {
    
    
            InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");

            //  FileInputStream in=new FileInputStream("db.properties");
            System.out.println("in:" + in);

            //Properties 将properties属性文件数据以k-v的形式加载到内存中
            Properties p = new Properties();
            //p.load(in)将int类型加载
            p.load(in);

            //properties里保存到变量中
            username = p.getProperty("db.username");
            password = p.getProperty("db.password");
            url = p.getProperty("db.url");
            driver = p.getProperty("db.driver");
            initSize = p.getProperty("db.initSize");
            maxSize = p.getProperty("db.maxSize");

            System.out.println(username);
            System.out.println(password);
            System.out.println(url);
            System.out.println(driver);

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

    }


使用 BasicDataSource 方法封装一个获取连接池方法

basicDataSource = new BasicDataSource();

将数据库的参数设置到连接池对象中并返回 basicDataSource

    basicDataSource.setDriverClassName(driver);
    basicDataSource.setUsername(username);
    basicDataSource.setPassword(password);
    basicDataSource.setUrl(url);
    basicDataSource.setInitialSize(Integer.parseInt(initSize));
    basicDataSource.setMaxActive(Integer.parseInt(maxSize));
    return  basicDataSource;

通过连接池获取连接对象

	//通过连接池获取连接对象
    public static Connection getConn(){
    
    
        Connection connection = null;
        try {
    
    
            connection = DBUtil.getBData().getConnection();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
        return  connection;
    }

util目录下是DBUtil完整代码:

package util;

/*

连接数据的类

 */


import org.apache.commons.dbcp.BasicDataSource;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtil {
    
    
    private static String username;
    private static String password;
    private static String url;
    private static String driver;
    private static String initSize;
    private static String maxSize;
    private static BasicDataSource basicDataSource;


    static {
    
    

        try {
    
    
            InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");

            //  FileInputStream in=new FileInputStream("db.properties");
            System.out.println("in:" + in);
            Properties p = new Properties();
            p.load(in);

            username = p.getProperty("db.username");
            password = p.getProperty("db.password");
            url = p.getProperty("db.url");
            driver = p.getProperty("db.driver");
            initSize = p.getProperty("db.initSize");
            maxSize = p.getProperty("db.maxSize");

            System.out.println(username);
            System.out.println(password);
            System.out.println(url);
            System.out.println(driver);

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

    }

    //封装一个获取连接池的连接方法
    public static BasicDataSource getBData() {
    
    
    basicDataSource = new BasicDataSource();
    //将数据库的参数设置到连接池对象中
    basicDataSource.setDriverClassName(driver);
    basicDataSource.setUsername(username);
    basicDataSource.setPassword(password);
    basicDataSource.setUrl(url);
    //将字符串转为Integeter类型
    basicDataSource.setInitialSize(Integer.parseInt(initSize));
    basicDataSource.setMaxActive(Integer.parseInt(maxSize));

    return basicDataSource;

    }

    //通过连接池获取连接对象
    public static Connection getConn(){
    
    
        Connection connection = null;
        try {
    
    
            connection = DBUtil.getBData().getConnection();
        } catch (SQLException throwables) {
    
    
            throwables.printStackTrace();
        }
        return connection;
    }
}

2.2.3 测试

Test包内的Java包下新建测试类:DBTest

import org.junit.Test;
import util.DBUtil;

import java.sql.Connection;

public class DBTest {
    
    

    //单元测试 junit 单元测试包
    /*单元测试方法
    注意:1 方法返回值只能写void
    2 方法不能传参数
    3 方法上面使用@Test注解*/
    @Test
    public void test1(){
    
    

        Connection conn = DBUtil.getConn();
        System.out.println("conn:"+conn);
    }
}

测试结果:
在这里插入图片描述

打印了 conn 数据库连接池连接成功

猜你喜欢

转载自blog.csdn.net/qq_43881663/article/details/112875921