JDBC之连接池

什么是连接池
  • 没有连接池的情况:每次用户都要创建数据库连接对象,然后销毁对象

  • 数据库连接池

    • 池: 保存数据的对象

    • 连接池: 保存数据库连接对象的容器

    • 作用:

      • 拥有多个数据库对象,用时即拿
      • 用完后并不直接释放掉对象,而是放入池中方便下次使用

      池技术的优势: 消除库对象创建所带来的延迟,从而提高系统的性能

  • 数据连接池当中的属性:

    • 1.连接数据时需要的4 要素:驱动名称,数据库地址,用户名,密码
    • 2.初始化连接数
    • 3.最大连接数
    • 4.最小连接数
    • 5.最大空闲时间:如果获取了连接对象,在指定时间内没有任何操作,就会自动释放连接
    • 6.最大等待时间:在指定时间内,尝试获取连接,若果超出指定时间,就会提示获取失败
连接池的使用
  • 简介:

    ​ 连接池是使用java.sql.DataSource接口来表示连接池

    ​ DataSource 和 jdbc 一样,也只是提供一个接口,由第三方组织提供

  • 常见连接池;

    • DBCP:Spring推荐
    • Druid:阿里巴巴提供(荐用)
  • 使用连接池与不使用连接池的区别

    • 获取方式不同
      • 传统: Connection conn = DriverManner.getConnection(url, user,password);
      • 连接池 ; Connection conn = DataSource对象.getConnection();
    • 释放资源不同
      • 传统: 和数据断开 conn.close();
      • 连接池: 把数据库对象还给连接池,给下一个人来使用
  • 连接池操作:

    • 主要学习创建DataSource对象,再从DataSource对象中获取Connection 对象
    • 都是第三方提供好的,直接调用即可
    • 连接之后,操作和以前一样
    • 不同的数据库连接池,就是创建的DataSource上不一样
创建DataSource
  • 导入jar包

    • 若是 dbcp ,则需要下载commons-dbcp-1.4.jar 和 commons-pool-1.6.jar ,如何下载jar包:https://blog.csdn.net/be_your1/article/details/88110883
    • 若是 druid ,去github官网下载 :https://github.com/alibaba/druid/

    下载完毕之后,导入到项目的 lib 文件夹中,和导入 mysql-connector-java-8.0.25.jar 操作一样

  • 获取连接对象

    直接上代码:

    package com.zhj.jdbc.test;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.pool.DruidPooledConnection;
    import org.apache.commons.dbcp.BasicDataSource;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class DBCPTest {
        public static void main(String[] args) {
            String driverName = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost:3306/stus?rewriteBatchedStatements=true";
            String user = "root";
            String password = "034312";
            DruidDataSource ds = new DruidDataSource();
    //        BasicDataSource ds = new BasicDataSource();
            ds.setDriverClassName(driverName);
            ds.setUrl(url);
            ds.setUsername(user);
            ds.setPassword(password);
            try {
                // 建立连接,下面一起常规操作,只是获取conn 对象不同
               Connection conn = ds.getConnection();
                // 创建语句
                String sql = "select * from student";
                // 执行语句
                PreparedStatement ps = conn.prepareStatement(sql);
                ResultSet res = ps.executeQuery();
                if(res.next()){
                    System.out.println(res.getString(2));
                    System.out.println(res.getInt(3));
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
          // 释放资源
        }
    }
    
配置文件
  • 什么是配置文件?

    ​ 资源文件,以.properties作为扩展名的的文件

  • 如何用?

    ​ 创建.properties

    ​ 以 key = value 的形式存储

  • 通常在项目目录下创建一个 source 文件夹,在里面创建.properties 文件

读取配置文件,获取conn对象
  • 创建配置文件 db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/stus?rewriteBatchedStatements=true
username=root
password=034312

注意: 这里的 属性名(key) 的规范写法,使用别的名称可能会报错

  • 读取文件
@Test
    public void getConnectionTest(){
        Properties p = new Properties();
        FileInputStream fis = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet res = null;
        try {
            fis = new FileInputStream("source/db.properties");
            p.load(fis);
            //System.out.println(p.get("driver"));
            //System.out.println(p.get("url"));
            //System.out.println(p.get("username"));
            //System.out.println(p.get("password"));
            DataSource ds = DruidDataSourceFactory.createDataSource(p);
//            // 建立连接
            conn = ds.getConnection();
            // 创建语句
            String sql = "select * from student";
            // 执行语句
            ps = conn.prepareStatement(sql);
            res = ps.executeQuery();
            if (res.next()) {
                System.out.println(res.getString(2));
                System.out.println(res.getInt(3));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            // 释放资源
            try {
                if(conn != null){
                    conn.close();
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值