关于数据库连接池druid

数据库连接池是做什么的呢?实现原理?简单实例?存在问题以及解决方案。还有那些问题没有解决?

一、介绍

数据库连接池是一个用于管理和提供数据库连接的软件组件。

      好处:1.节省资源

                 2.提高效率

                 3.控制连接数,解决并发问题。

 二、实现原理

       在应用程序和mysql数据库之间创建一个数据库连接池,将mysql中的数据库比如(db_news2019)预存到数据库连接池中,应用程序通过数据库连接池来获取连接或者关闭连接。此时就会出现两个疑惑。第一,将mysql中的数据库如何预存到数据连接池中?这个应该是druid的内部原理,目前来说不知道。第二,mysql中的数据库预存到数据库连接池中不会浪费大量资源吗?因此需要了解druid.properties中的配置信息。设置一个合理的连接数和连接存在时间。

 三 、用例

删除数据库db_news2019中的一条信息

druid.properites的配置信息(位置在src/main/resource)--------------------------------------------------------------
url=jdbc:mysql://localhost:3306/db_news2019
username=root
password=123456
driverClassName=com.mysql.cj.jdbc.Driver
initialSize=10
maxActive=10

JDBCUtils(工具类--来实现数据库连接池技术)-------------------------------------------------package till;

import com.alibaba.druid.pool.DruidDataSourceFactory;

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

public class JDBCUtils {
//    1.定义成员变量
  private static DataSource source;
    static{
        try {
            // 1.创建properties
            Properties pros = new Properties();
            //2.加载输入流
            InputStream is =  ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
           // 3.加载到配置文件对象中去
            pros.load(is);
           //   配置数据源
            DruidDataSourceFactory.createDataSource(pros);

            source = DruidDataSourceFactory.createDataSource(pros);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*
     *获取连接
     */
    public static Connection  getConnection() throws SQLException {
        return source.getConnection();

    }
    /**
     * 释放连接
     */
    public static void close(ResultSet rs, PreparedStatement ps, Connection conn) {
        try {
            if (rs != null){
                rs.close();
            }
            if (ps!=null){
                ps.close();
            }
            if (conn != null){
                conn.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
    /**
     * 获取连接池的方法
     */
    public static DataSource getDataSource(){
        return source;
    }
}
test(测试用例)--------------------------------------------------------------------------
package test;

import till.JDBCUtils;

import java.sql.*;

public class test1 {
    public static void main(String[] args) {
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "delete from t_user where uid = ?";
            ps = conn.prepareStatement(sql);
            ps.setObject(1,"U10022");
            ps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}
运行结果:

 四.存在问题以及解决方案

1.关于druid数据库连接池的实现代码有很多,但你的版本不一定都适用,

2.在导入druid.jre包的时候别忘了导入mysql-connector-j-8.0.31

3.关于配置信息要注意,

4.druid.properties的位置要放在src/main/resource中。当然不同的方法位置可能不同。

五、问题

在思考之后,才发现最大连接数指的是能有多少个用户同时使用连接,还以为是数据库能连多少个。此时问题就出来了,如何实现多个数据库的数据池。

如果有大佬的话,请帮忙解决一下,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值