使用JDBC技术是一件繁琐的事情,为了使数据库更加高效,有一种简化jdbc技术的操作--DBUtils。DbUtils(org.apache.commons.dbutils.DbUtils)是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。DbUtils类主要负责装载驱动、关闭连接的常规工作。

 QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。它包含以下几个方法:
  1.   query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
  2.   query(String sql, Object[] params, ResultSetHandler rsh):方法本身不提供数据库连接,执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
  3.   query(Connection conn, String sql, ResultSetHandler rsh):执行无需参数的选择查询。
  4.   update(Connection conn, String sql, Object[] params):被用来执行插入、更新或删除(DML)操作。

其中ResultSetHandler接口(org.apache.commons.dbutils.ResultSethandler)执行处理一个结果集对象,将数据转变并处理为任何一种形式,供其他应用使用。实现类如下:

ArrayHandler:把结果集中的第一行数据转成对象数组。
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:将结果集第一行的某一列放到某个对象中。//重点

案例

先导入所需要的包



创建一个DButils类JDBCUtils.java:

/**
* 创建数据库连接池
*/
public class JDBCUtils {
// 创建一个ThreadLoacl对象,用当前线程作为key
private static ThreadLocal<Connection> tc = new ThreadLocal<Connection>();
// 读取的是C3P0-config默认配置创建数据库连接池对象
private static DataSource ds = new ComboPooledDataSource(); // 获取数据库连接池对象
public static DataSource getDataSource() {
return ds;
} // 从连接池中获取连接
public static Connection getConnection() throws SQLException {
Connection conn = tc.get();
if (conn == null) {
conn = ds.getConnection();
// 将conn存放到集合tc中
tc.set(conn);
System.out.println("首次创建连接:" + conn);
}
return conn;
} // 开启事务
public static void startTransaction() {
try {
// 获取连接
Connection conn = getConnection();
// 开启事务
/*
* setAutoCommit总的来说就是保持数据的完整性,一个系统的更新操作可能要涉及多张表,需多个SQL语句进行操作
* 循环里连续的进行插入操作,如果你在开始时设置了:conn.setAutoCommit(false);
* 最后才进行conn.commit(),这样你即使插入的时候报错,修改的内容也不会提交到数据库,
*/
conn.setAutoCommit(false);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void commit() {
try {
Connection conn = tc.get();
if (conn != null) {
conn.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
} public static void rollback() {
try {
// 从集合tc中得到一个连接
Connection conn = tc.get();
if (conn != null) {
// 该方法用于取消在当前事务中进行的更改,并释放当前Connection对象持有的所有数据库锁。此方法只有在手动事务模式下才可用
conn.rollback();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

添加数据

// 添加数据
public void add(Order order) throws Exception {
Connection connection = JDBCUtils.getConnection();
String sql = "insert into order1(id) values(?)";
qr.update(connection, sql, order.getId());
}

查询数据,调用query()方法去执行查询语句.


public List<Order> findAllUser() throws SQLException {
String sql = "select * from order1";
return qr.query(sql, new BeanListHandler<Order>(Order.class));
}

因为我们用的C3P0数据库连接池获取的DataSource, 所以这里直就可以过去到当前的Connection.

修改数据

public void update(Order order) throws SQLException {
String sql = "update order1 set state=? where id=?";
qr.update(sql, order.getState(), order.getId());
}

删除数据

	public void deleteById(String id) throws SQLException {
String sql = "delete from order1 where id=?";
qr.update(sql, id); }

QueryRunner使用总结的更多相关文章

  1. QueryRunner类 的應用,以及ResultSetHandler 接口的实现类

    1 .该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式. ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql. ...

  2. [JavaWeb]关于DBUtils中QueryRunner的一些解读.

    前言:[本文属于原创分享文章, 转载请注明出处, 谢谢.]前面已经有文章说了DBUtils的一些特性, 这里再来详细说下QueryRunner的一些内部实现, 写的有错误的地方还恳请大家指出. Que ...

  3. 使用ThreadLocal、Apache的dbutils的QueryRunner和dbcp2数据库连接池的BasicDataSource封装操作数据库工具

    package hjp.smart4j.framework.helper; import hjp.smart4j.framework.util.CollectionUtil; import hjp.s ...

  4. QueryRunner类

    该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量. QueryRunner类提供了两个构造方法: 默认的构造方法 需要一个 ja ...

  5. QueryRunner(common-dbutils.jar)

    QueryRunner update方法:* int update(String sql, Object... params) --> 可执行增.删.改语句* int update(Connec ...

  6. QueryRunner使用

    在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——D ...

  7. QueryRunner的API

    org.apache.commons.dbutils Class QueryRunner java.lang.Object org.apache.commons.dbutils.AbstractQue ...

  8. org.apache.commons.dbutils.QueryRunner 执行sqlserver的存储过程

    执行不带输出参数的存储过程与 执行普通update  sql没有什么区别,直接调用即可: 示例代码: public Boolean startResidentialInfoStatistics(Str ...

  9. QueryRunner的使用

    在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——D ...

  10. 转账示例(四):service层面实现(线程管理Connection,AOP思想,动态代理)(本例采用QueryRunner来执行sql语句,数据源为C3P0)

    用了AOP(面向切面编程),实现动态代理,service层面隐藏了开启事务.1.自行创建C3P0Uti,account数据库,导入Jar包 2.Dao层面 接口: package com.learni ...

随机推荐

  1. 题解:2018级算法第六次上机 C6-不Nan的过河

    题目描述: 样例: 实现解释: 一道因为没排序做了一个小时没做出来的二分答案模板题(手动呲牙) 知识点: 二分答案,最大值最小化 坑点: 排序,judge(mid)函数内计数的实现 其实从最长一步的最 ...

  2. LDAP脚本批量导出用户

    背景:工作原因,搭建了LDAP服务,然后用户数过多,因为懒所以就通过python代码生成ldap脚本进行批量导入用户 1.整理用户名单,格式如下: 注:上述格式影响代码中的excel读取代码 2.py ...

  3. iOS应用千万级架构:性能优化与卡顿监控

    CPU和GPU 在屏幕成像的过程中,CPU和GPU起着至关重要的作用 CPU(Central Processing Unit,中央处理器) 对象的创建和销毁.对象属性的调整.布局计算.文本的计算和排版 ...

  4. layui弹窗里面 session过期 后跳转到登录页面

    1.在登录页面添加 <script> $(function () { if (top != window) { layer.msg("登录失效", {icon: 5}) ...

  5. bzoj1787[Ahoi2008]Meet 紧急集合&bzoj1832[AHOI2008]聚会

    bzoj1787[Ahoi2008]Meet 紧急集合 bzoj1832[AHOI2008]聚会 题意: 给个树,每次给三个点,求与这三个点距离最小的点. 题解: 倍增求出两两之间的LCA后,比较容易 ...

  6. 第一部分软件测试综述——软件测试背景【软件测试】(美)Ron Patton中文电子版

    截取自:第一部分软件测试综述——软件测试背景[软件测试](美)Ron Patton中文电子版(有需要的可以关注我) 第一部分软件测试综述 对手的程序死掉叫崩溃.自己的程序死掉叫“身体不良反应(idio ...

  7. OGG19.1 oracle12c到oracle12c经典模式配置实施

    OGG19.1 oracle12c到oracle12c经典和集成模式配置实施 目的说明 本文提供Oracle GoldenGate在Oracle db到Oracle db的数据复制安装配置指导,适用于 ...

  8. p70_域名解析系统DNS

    一.DNS作用 二.域名 www.cskaoyan.com. www 三级域名 cskaoyan 二级域名 com 顶级域名 三.域名服务器 根域名服务器:知道所有顶级域名服务器的域名和ip地址 顶级 ...

  9. pyinstall打包资源文件

    相关代码 main.py import sys import os #生成资源文件目录访问路径 #说明: pyinstaller工具打包的可执行文件,运行时sys.frozen会被设置成True # ...

  10. [spring cloud] -- 服务注册与服务发现篇

    eureka 服务发现客户端 DiscoveryClinet职责(核心) 注册服务无试了到Eureka Server中; 发送新塘更新与Eureka Server的租约: 在服务关闭时从Eureka ...