[JDBC笔记]02.连接池的使用

本文详细介绍了数据库连接池的概念和作用,包括C3P0、Durid和DBCP三种常用的数据库连接池的配置及使用方法。此外,还讲解了Spring框架中的JdbcTemplate,如何创建对象并调用其方法进行CRUD操作,如update()、queryForMap()、queryForList()和queryForObject()等。
摘要由CSDN通过智能技术生成


数据库连接池

数据库连接池的概念

连接池的作用,更加效率的连接数据库.
在用户连接数据库时,获得数据库连接池的通道对象
在用户完成操作关闭通道时,这时候通道没有真正的关闭
而是返回数据库连接池,进行重新利用

连接池在连接中释放与使用的规则
  1. 启动时创建初始化数量的连接
  2. 当申请的连接达到最小连接数时,创建新的连接
  3. 当申请的连接达到最大连接数时,让申请进入等待状态
  4. 当申请进入等待状态超时时,空闲超时释放,获取超时报错

C3P0连接池

C3P0连接池:⼀个开源的 JDBC 连接池,它实现了数据源和 JNDI 绑定。
⽬前使⽤它的开源项⽬有Hibernate、 Spring等。

1.导入jar包

 c3p0-0.9.5.2.jar
 mchange-commons-java-0.2.11.jar

2.定义配置文件

驱动地址,url,数据库账号和密码,初始化连接数,最大最小连接数等

3.定义C3P0Util工具类

在创建对象时调用的是空参构造器(实际使用的是default-config选项)
加载了配置文件

public class C3P0Utils {
    private static DataSource dataSource = new ComboPooledDataSource();

    public static DataSource getDataSource() {
        return dataSource;
    }
    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
}

Durid连接池

Durid连接池:由阿⾥巴巴提供的数据库连接池实现技术,⽀持所有 JDBC 兼容的数据库,包括
Oracle、 MySql等。

1.导入jar包

druid-1.1.16.jar

2.定义配置文件

驱动地址,url,数据库账号和密码,初始化连接数,最大最小连接数等

3.定义DruidUtil工具类

Druid和C3P0不同的是,他使用的是DruidDataSourceFactory来获得datasource
需要传入配置文件.

public class DruidUtils {
    private static DataSource dataSource ;
    static {
        Properties prop = new Properties();
        try {
            prop.load(DruidUtils.class.getResourceAsStream("druid.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static DataSource getDataSource() {
        return dataSource;
    }
    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
}


DBCP连接池

DBCP连接池:也是⼀个开源的连接池,是Apache Common成员之⼀,也是tomcat内置的连接
池。

1.导入jar包

commons-dbcp2-2.1.1.jar
commons-pool2-2.4.2.jar
commons-logging-1.2.jar

2.定义配置文件

驱动地址,url,数据库账号和密码,初始化连接数,最大最小连接数等

3.定义DBCPUtil工具类

和Druid数据源类似,所以配置文件也相似

public class DruidUtils {
    private static DataSource dataSource ;
    static {
        Properties prop = new Properties();
        try {
            prop.load(DruidUtils.class.getResourceAsStream("druid.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static DataSource getDataSource() {
        return dataSource;
    }
    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
}

JDBCTemplate-spring

JdbcTemplate是通过 SQL语句 + 参数,模板化了编程.它是Spring框架中提供的⼀个对象

,是对原始 Jdbc API 对象的简单封装。

与他相似的是DBUtils-apache(QueryRunner)

1.导入jar包
commons-logging-1.2.jar
spring-beans-5.2.6.RELEASE.jar
spring-core-5.2.6.RELEASE.jar
spring-jdbc-5.2.6.RELEASE.jar
spring-tx-5.2.6.RELEASE.jar
2.创建JdbcTemplate对象

jdbcTemplate-这是基于数据源技术的

所以还需要传入一个数据库连接池

JdbcTemplate jdbcTemplate=new JdbcTemplate(DruidUtil.getDataSource());
3. 调⽤JdbcTemplate的⽅法来完成CRUD的操作
update():执⾏DML语句。增、删、改语句
// 定义sql语句
String sql = "insert into user2 values(?,?,?)";
 // 执行sql语句
String uuid = UUID.randomUUID().toString().replaceAll("-","");
// 传入sql语句和参数
jdbcTemplate.update(sql, uuid, "lucy","12345");
queryForMap():将结果封装到map集合中.

其中key就是字段名, value就是字段对应的数据

注意: 结果集要求只能有一条数据, 多了 expected 1, actual 2 (单行多列)

public void test01() {
// 定义sql语句
String sql = "select * from emp where empno = ?";
// 传入sql语句和参数
Map<String, Object> map = jdbcTemplate.queryForMap(sql, 7369);
// {empno=7369, ename=SMITH, job=CLERK, mgr=7902, hiredate=1980-12-17, sal=800, comm=null, deptno=20}
System.out.println(map);
}
queryForList():查询结果将结果集封装为list集合

注意:将每⼀条记录封装为⼀个Map集合,再将Map集合装载到List集合中

public void test02() {
        // 定义sql语句
        String sql = "select * from emp where empno = ? or empno = ?";
        // 传入sql语句和参数
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, 7369, 7521);
        list.forEach(System.out::println);
    }
query():查询结果,将结果封装为JavaBean对象

query的参数: RowMapper

⼀般我们使⽤ BeanPropertyRowMapper 实现类。

可以完成数据到JavaBean 的⾃动封装

new BeanPropertyRowMapper<类型>(类型.class)

public void test03() {
        // 定义sql语句
        String sql = "select * from emp ";
        List<Emp> list = jdbcTemplate.query(sql,
                new BeanPropertyRowMapper<Emp>(Emp.class));
        list.forEach(System.out::println);
    }
queryForObjec():查询结果,将结果封装为对象

⼀般⽤于聚合函数的查询

注意:如果没有查到数据, 就会抛异常 必须查到一个值 expected 1, actual 0/2

public void test05() {
        // 定义sql语句
        String sql = "select count(*) from emp ";

        Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(integer);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值