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连接池的主要内容,如果未能解决你的问题,请参考以下文章