JDBC连接池

Posted junqiang-ma

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC连接池相关的知识,希望对你有一定的参考价值。

连接池原理:

理解为存放多个连接的集合。

目的:解决建立数据库连接耗费资源和时间很多的问题,提高性能。

编写标准的数据源(规范)

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应        用程序可以方便的切换不同厂商的连接池!

常见的连接池:DBCP、C3P0

 

DBCP连接池

   * javax.sql.DataSource 接口

         *                 Connection getConnction() 从连接池中获取连接

         * BasicDataSource 实现 DataSource接口

         * 想要从连接池中获取连接对象 只要创建BasicDataSource对象<BasicDataSourceFactory.createDataSource(p)> 调用getConnction方法即可

C3P0

         * javax.sql.DataSource 接口

         * C3P0实现了此接口

         * ComboPooledDataSource 实现DataSource接口

* 想要从连接池中获取连接对象 只要创建ComboPooledDataSource对象<new ComboPooledDataSource();> 调用getConnction方法即可

 

使用DBUtils 执行增删改查的操作

作用:简化JDBC代码开发,本案例我们将采用apache commons组件一个成员:DBUtils。

DBUtils就是JDBC的简化开发工具包。需要使用技术:连接池(获得连接),SQL语句都没有少

 

 

JavaBean就是一个类,在开发中常用于封装数据。具有如下特性

1.需要实现接口:java.io.Serializable ,通常偷懒省略了。

2.提供私有字段:private 类型 字段名;

3.提供getter/setter方法:

4.提供无参构造

 

 

 

DBUtils完成CRUD

概述

DBUtils是java编程中的数据库操作实用工具,小巧简单实用。

DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

Dbutils三个核心功能介绍

                QueryRunner中提供对sql语句操作的API.

                ResultSetHandler接口,用于定义select操作后,怎样封装结果集.

DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法

 

QueryRunner核心类

        QueryRunner(DataSource ds) ,提供数据源(连接池),DBUtils底层自动维护连接connection

        update(String sql, Object... params) ,执行更新数据 insert update delete

        query(String sql, ResultSetHandler<T> rsh, Object... params) ,执行查询 select

 

对数据库中的分类表进行 增删改

 

 * QueryRunner 执行sql语句

 *  构造方法

 *      QueryRunner() 如果使用空参数创建对象 连接对象需要自己维护

 *      QueryRunner(DataSource ds) 如果使用带参构造创建对象 连接不需要我们维护

 *  方法

 *          update(Connection con ,String sql ,Object...params)

 *          update(String sql,Object...params)

 

 * 对数据中分类进行查询

 * QueryRunner

 *                 <T> T        query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

 *                 <T> T        query(String sql, ResultSetHandler<T> rsh, Object... params)

 *                 参数

 *                         String sql :sql语句支持预编译

 *                         ResultSetHandler:接口 ,根据查询结果的不同,传入不同实现类 返回不同的结果

 *                         Object...params:对sql语句的?赋值

 

 

ResultSetHandler结果集处理类:方法集

<封装数组>

 * ArrayHandler 将查询结果的第一条记录封装到一个Object数组中

 * 一般情况都是在查询一条记录时使用

 定义集合: new ArrayHandler()

 * ArrayListHandler

 * 将查询结果中的每条记录都封装到一个Object数组中

 * 将多个Objct数组放入一个List集合中

 *

 * 查询多条记录时使用

 * 查询所有分类记录

定义集合:new ArrayListHandler()

<封装为对象>

 * BeanHandler

 * 将查询结果的第一条记录封装到一个JavaBean对象中

 * 一般情况都是在查询一条记录时使用

 *

 * 构造方法需要给出要封装的对象的数据类型

 *

 * 查询分类表中id=3的商品信息

定义集合<把数据封装到对象>:new BeanHandler<对象>(对象.class)

 * BeanListHandler

 * 将查询结果的每条记录封装到一个JavaBean对象中

 * 将每个JavaBean对象 封装到一个List集合中

 *

 * 查询多条记录时使用

 * 查询所有分类记录

定义封装对象的list集合<先把数据封装到对象再把对象加到集合>:new BeanListHandler<对象>(对象.class)

<封装为一列>

 * ColumnListHandler

 * 将查询结果的一列数据 封装到一个List集合

 *

 * 查询所有商品名称

         定义集合:ColumnListHandler<String>("要查找的元素");

<封装一个结果>

 * ScalarHandler

 * 只有一个查询结果的时候可以使用

 * 一般情况都是使用聚合函数后 获取结果 使用

 *

<封装到map集合>

 * MapHandler

 * 将结果集的第一条记录封装到一个Map集合

 * 键:String 列名

 * 值:object 对应的查询到的值

 *

 * 一般情况都是在查询一条记录时使用

定义一个集合: new MapHandler()  key就是字段名称,value就是字段值

 * MapListHandler

 * 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,

在将这些Map封装到List集合中。

 

 

定义一个方法,查询用户表,获得所有用户的所有信息,返回一个Map集合(Map集合的key是用户id,value是每一个用户的信息,也是一个Map集合。)

*KeyedHandler<Integer> kh = new KeyedHandler<Integer>("id");

*Map<Integer, Map<String, Object>>query = qr.query(sql, kh);

 

以上是关于JDBC连接池的主要内容,如果未能解决你的问题,请参考以下文章

数据库连接池与JDBC的区别

JDBC连接池和Spring JDBC

JDBC连接池概述

数据库连接池的Java连接池

jdbc数据库连接池

JDBC MySql 连接池实践避免连接池耗尽