JDBC工具类-DButils(QueryRunner-ResultSetHandler)
简述:
DBUtils是Java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
DBUtils三个核心功能:
- QUeryRunner中提供对sql语句操作的API。
- ResultSetHandler接口,用于定义select操作后,怎样封装结果集
- DBUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
- 需要导入的jar包:①MySQL驱动 ②c3p0包 ③DBUtils包
- 添加c3p0-config.xml配置
- 可以自动添加一个JDBCUtils工具类:用来获取c3p0连接池对象
QueryRunner核心类:
QueryRunner;带参-提供数据源,dbutils底层自动维护连接Connection;无参-不提供连接池对象,在调用下面的方法时必须提供Connection对象。
- QueryRunner();创建一个与数据库无关的QueryRunner对象。后期在操作数据库的时候,需要手动给一个Connection对象,他可以手动控制事务。
- Connection.setAutoCommit(false);设置手动管理事务
- Connection.commit();提交事务
- QueryRunner(DataSource ds);创建一个与数据库关联的QueryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。
update(String sql,Object...params);可执行 增-INSERT、删-DELETE、改-UPDATE
- update(String sql);
- update(String sql,Object...params);
- update(Connection conn,String sql,Object...params);
query(String sql,ResultSetHandler<T> rsh,Object...params);执行 查询-SELECT
- query(String sql,ResultSetHandler rsh);不需要替换参数来执行已给予的SELECT语句
- query(String sql,ResultSetHandler,Object ...params);需要一个或多个替换参数来执行已给予的SELECT语句,返回一种结果对象
- query(Connection conn,String sql,ResultSetHandler rsh,Object ...params);支持事务,需要一个或多个替换参数来执行已给予的SELECT语句,返回一种结果对象
ResultSetHandler结果集处理类;执行处理一个结果集对象,将数据转变并处理为任何一种形式,供其他应用使用。
ArrayHandler:适合取1条记录,把结果集中的第一行数据转成对象数组。
ArrayListHandler:适合取多条记录,把结果集中的每一行数据都转成一个对象数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中(把每条记录封装成对象,适合取一条记录)。
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里,其key为指定的列。
ScalarHandler:将结果集第一行的某一列放到某个对象中。
JavaBean:类似于Model模型
需要实现接口:java.io.Serializable
提供私有字段:private 类型 字段名;
提供getter/setter方法:
提供无参构造
实例代码:
import java.sql.SQLException;
import java.util.List;
import java.util.Map; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler; import com.mchange.v2.c3p0.ComboPooledDataSource; public class TestQueryRunner { public static void main(String[] args) throws SQLException { //获取数据源
DataSource ds = new ComboPooledDataSource();
QueryRunner queryRunner = new QueryRunner(ds); //------------------------------更新语句------------------------------------ // String sql = "SELECT * FROM goods WHERE id = ?";
// Map<String, Object> query = queryRunner.query(sql, new MapHandler(),1);
// for(String key:query.keySet()) {
// System.out.println(key+":"+query.get(key));
// } // String sql = "DELETE FROM type WHERE id in(?,?)";
// int update = queryRunner.update(sql,6,7);
// System.out.println(update); // String sql = "UPDATE type SET name = '生日系列' WHERE id = ?";
// int update = queryRunner.update(sql,8);
// System.out.println(update); // String sql = "INSERT INTO type (name) values(?)";
// int update = queryRunner.update(sql,"成人系列");
// System.out.println(update); //------------------------------查询语句------------------------------------ //ArrayHandler:将查询的结果的第一行放到一个数组中
// String sql = "SELECT * FROM goods";
// Object[] query = queryRunner.query(sql, new ArrayHandler());
// for (Object o : query) {
// System.out.println(o);
// } //ArrayListHandler:将查询的结果的每一行放到一个数组中,然后再将数组放到集合中;
// String sql = "SELECT * FROM goods";
// List<Object[]> query = queryRunner.query(sql, new ArrayListHandler());
// for (Object[] obj : query) {
// for (Object o : obj) {
// System.out.print(o + " ");
// }
// System.out.println();
// } //BeanHandler:将查询的结果的第一行封装到一份javabean对象中;
// String sql = "SELECT * FROM goods";
// Goods query = queryRunner.query(sql, new BeanHandler<Goods>(Goods.class));
// System.out.println(query); //BeanListHandler:将查询的结果的每一行封装到一个javabean对象中,然后再将这些对象存入list中;
// String sql = "SELECT * FROM goods";
// List<Goods> list = queryRunner.query(sql, new BeanListHandler<Goods>(Goods.class));
// for(Goods goods:list) {
// System.out.println(goods.getName());
// } //ColumnListHandler:查询指定的列,将查询结果放到一个List中
// String sql = "SELECT * FROM goods";
// List<Object> list = queryRunner.query(sql, new ColumnListHandler<Object>("name"));
// for(Object o:list) {
// System.out.println(o);
// } //ScalarHandler:将查询的结果的第一行的某一列放到一个对象中;精确定位到某个值;
// String sql = "SELECT COUNT(*) FROM goods";
// Long query = queryRunner.query(sql, new ScalarHandler<Long>());
// System.out.println(query); //MapHandler:将查询的结果的第一行存入到一个map中,键为列名,值为各列值;
// String sql = "SELECT * FROM goods";
// Map<String, Object> query = queryRunner.query(sql, new MapHandler());
// for (String key : query.keySet()) {
// System.out.println(key + ":" + query.get(key));
// } //MapListHandler:将查询的结果的每一行存入到一个map中,键为列名,值为各列值;然后再将map存入list中;
// String sql = "SELECT * FROM goods";
// List<Map<String, Object>> query = queryRunner.query(sql, new MapListHandler());
// for (Map<String, Object> map : query) {
// for(String key:map.keySet()) {
// System.out.print(key+":"+map.get(key)+" ");
// }
// System.out.println();
// }
} }
JDBC工具类-DButils(QueryRunner-ResultSetHandler)的更多相关文章
- 开源JDBC工具类DbUtils
本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...
- Java基础-DButils工具类(QueryRunner)详解
Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
- JDBC第三篇--【事务、元数据、改造JDBC工具类】
这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 这是我JDBC的第二篇 http://blog.csdn.net/ho ...
- JDBC【事务、元数据、改造JDBC工具类】
1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...
- 自己实现的JDBC工具类
最近做了个后台应用程序,刚开始用Spring+iBatis来做的,后来因为种种原因,不让用Spring.iBatis以及一些开源的工具包. 于是用JDBC重写了原来的Service实现,项目做完了 ...
随机推荐
- java编程规约二
四.OOP规约(Object Oriented Programming,面向对象设计) 1.静态变量和静态方法直接用类名访问,不要再new 对象去访问 2.方法覆盖必须加@Override注解 3.尽 ...
- PHP网络请求优化
目录 1. 设置超时时间 2. 将串行请求并行化 1. 设置超时时间 连接超时:200ms 读超时: 800ms 写超时: 500ms 2. 将串行请求并行化 使用curl_multi_*() 使用s ...
- mybatis 查询sql时foreach使用法
找到俩个例子摘下来 sql查询用户in传list参数 <select id="getEmpsByConditionForeach" resultType="com. ...
- JS数组 呼叫团里成员(使用数组元素) myarray[0]
呼叫团里成员(使用数组元素) 我们知道数组中的每个值有一个索引号,从0开始,如下图, myarray变量存储6个人的成绩: 要得到一个数组元素的值,只需引用数组变量并提供一个索引,如: 第一个人的 ...
- 2019个人计划与Flag与期望
突然发现写博客是真的好. 希望未来能在其他地方写上日记. 总结2018中的个人缺陷: 1.忘掉了学习方法或者说学习方法不正确 2.偶尔就会去偷下懒,对自己不够严格,自控能力差. 3.心态虽比以前好很多 ...
- 廖雪峰Java11多线程编程-3高级concurrent包-3Condition
Condition实现等待和唤醒线程 java.util.locks.ReentrantLock用于替代synchronized加锁 synchronized可以使用wait和notify实现在条件不 ...
- 3、变量+运算符+Scanner
1.变量 1>开辟内存空间 int num ; 2>赋值 num = 10; 3>使用 num 1*long 类型的特殊 long num = 12L 2*float类型特殊 flo ...
- C# StructLayout(LayoutKind.Sequential)]
结构体是由若干成员组成的.布局有两种1.Sequential,顺序布局,比如struct S1{ int a; int b;}那么默认情况下在内存里是先排a,再排b也就是如果能取到a的地址,和b的 ...
- 如何学习AxureRP Axure学习方法
从作者最初接触的5.5版本,到5.6版本,到后来6.0的多个迭代版本,直到现在的6.5版本,AxureRP每次的版本升级都伴随着新功能的增 加,也解决了原型设计上的一些难题.这也从另一个方面诠释了“学 ...
- 13_数据的划分和介绍之sklearn数据集
1.数据集是如何划分?训练数据和评估数据不能使用相同数据,不然自己测自己,会使得准确率虚高,在遇到陌生数据时,不够准确. 2.数据集的获取: 通过load或者fetch方法. 3.数据集进行分割: 训 ...