Apache—DBUtils简介

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
API介绍:

  • org.apache.commons.dbutils.QueryRunner
  • org.apache.commons.dbutils.ResultSetHandler

工具类

  • org.apache.commons.dbutils.DbUtils

QueryRunner类 

  • public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
  • public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
  • public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。
  • public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
  • public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。

代码示例:

   @Test
public void testQuery(){ //2 使用期update方法
String sql = "select * from t_user";
Connection connection = null; try {
connection = MysqlUtils.getConnection();
/**
* query方法的返回值取决于其ResultSetHandler参数的handle方法的返回值
*/
List<User> list = queryRunner.query(connection, sql, new BeanListHandler<User>(User.class));
System.out.println(list.size());
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} @Test
public void testUpdate(){ //2 使用期update方法
String sql = "update t_user set password = ? where username = ?";
Connection connection = null; try {
connection = MysqlUtils.getConnection();
queryRunner.update(connection, sql,"cheng", "zhong");
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
} }

 ResultSetHandler接口 

  • ArrayHandler:把结果集中的第一行数据转成对象数组。
  • ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
  • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  • ColumnListHandler:将结果集中某一列的数据存放到List中。
  • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
  • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

其中选择比较重要的做示例:

BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

     /**
* BeanHandler: 把结果集的第一条记录转为创建 BeanHandler 对象时传入的 Class
* 参数对应的对象.
*/
@Test
public void testBeanHanlder(){
Connection connection = null; try {
connection = MysqlUtils.getConnection();
String sql = "select * from t_user WHERE uid >= ?"; User user = queryRunner.query(connection, sql, new BeanHandler<User>(User.class), 5); System.out.println(user.toString());
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

   /**
* BeanListHandler: 把结果集转为一个 List, 该 List 不为 null, 但可能为
* 空集合(size() 方法返回 0)
* 若 SQL 语句的确能够查询到记录, List 中存放创建 BeanListHandler 传入的 Class
* 对象对应的对象.
*/
@Test
public void testBeanListHandler(){
Connection connection = null; try {
connection = MysqlUtils.getConnection();
String sql = "select * from t_user"; List<User> userList = queryRunner.query(connection,sql, new BeanListHandler<User>(User.class)); System.out.println(userList);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

    /**
* MapHandler: 返回 SQL 对应的第一条记录对应的 Map 对象.
* 键: SQL 查询的列名(不是列的别名), 值: 列的值.
*/
@Test
public void testMapHandler(){
Connection connection = null; try {
connection = MysqlUtils.getConnection();
String sql = "select * from t_user"; Map<String, Object> result = queryRunner.query(connection,
sql, new MapHandler()); System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

  /**
* MapListHandler: 将结果集转为一个 Map 的 List
* Map 对应查询的一条记录: 键: SQL 查询的列名(不是列的别名), 值: 列的值.
* 而 MapListHandler: 返回的多条记录对应的 Map 的集合.
*/
@Test
public void testMapListHandler(){
Connection connection = null; try {
connection = MysqlUtils.getConnection();
String sql = "select * from t_user"; List<Map<String, Object>> result = queryRunner.query(connection,
sql, new MapListHandler()); System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

数据库DBUtils基本使用的更多相关文章

  1. 数据库——DBUtils和连接池

    第一章 DBUtils如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简 ...

  2. 数据库dbutils

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

  3. OSChina底层数据库操作的类(QueryHelper)源代码

    OSChina 使用的是 dbutils 这个JDBC的封装类库来进行数据库操作. 而 QueryHelper 则是在 dbutils 的基础上进行一级简单的封装,提供一些经常使用的数据库操作方法和对 ...

  4. 7.数据库、Contentobserver

    群组页是程序内部维护的一个数据库,其中一张表groups,用于存放创建的群组,还有一张表thread_group,用于关联群组和系统短信数据库中的会话. 数据库应该这样设计 MySqliteHelpe ...

  5. Xutils3的使用

    Xutils是前两年很火的一个三方库(githup地址),是一个工具类,分为4个模块:DbUtils.HttpUtils.ViewUtils. BitmapUtils,还有一个非常使用功能就是LogU ...

  6. Java爬取51job保存到MySQL并进行分析

    大二下实训课结业作业,想着就爬个工作信息,原本是要用python的,后面想想就用java试试看, java就自学了一个月左右,想要锻炼一下自己面向对象的思想等等的, 然后网上转了一圈,拉钩什么的是动态 ...

  7. Android后台数据接口交互实现注册功能

    首先,在ecplise里面新建一个叫做TestServices的web工程.在WebContent--WEB-INF--libs文件夹下导入两个jar包:mysql-connector-java-6. ...

  8. JSP应用开发 -------- 电纸书(未完待续)

    http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术   第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...

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

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

随机推荐

  1. TPYBoard V102:能跑Python的stm32开发板

    近来micropython语言做硬件编程很火,随之而来的就开始带动着支持micropython语言编程的开发板也开始火的发烫,今天小编就来和大家介绍一款很经典的micropython开发板-TPYBo ...

  2. 【转】Jenkins 安装与配置

    基本配置: 1.Linux安装配置jdk环境 1.1.上传到 Linux 服务器:例如: 上传至: cd /usr/local 1.2.解压: rpm -ivh jdk-8u111-linux-x64 ...

  3. HTML之前端操作div标签布局

    事例图片: div元素是用于分组HTML元素的块级元素 上图代码示例如下: <!DOCTYPE html> <html lang="en"> <hea ...

  4. Windows程序设计学习笔记(一)Windows内存管理初步

    学习Windows程序设计也有一些时间了,为了记录自己的学习成果,以便以后查看,我希望自己能够坚持写下一系列的学习心得,对自己学习的内容进行总结,同时与大家交流.因为刚学习所以可能有的地方写不不正确, ...

  5. python 学习源码练习(1)

    #编译方式,python3 文件名 #!/usr/bin/python3#print('hello world') mystring = 'hello world'print (mystring) # ...

  6. apache2.2版本安装说明

     部署httpd服务  apache是一个模块化设计的服务,所谓的模块化就是将各个功能,特性都独立的分开,这样设计的好处是可扩展性强,各个功能之间的依赖性相对较弱,在后期修改,升级,添加新功能是非常方 ...

  7. [转载]基于LVS的AAA负载均衡架构实践

    摘要 本次分享将从一次实际的负载均衡改造案例出发,通过介绍项目背景.选型思路.测试方法和问题分析等方面展开,总结负载均衡架构的一般套路和经验教训. 一.背景 项目背景是某企业的AAA管理系统, AAA ...

  8. echart

    先介绍echart: 官网: http://echarts.baidu.com  看名字就知道是百度出品的.       ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC ...

  9. 如何转换MySQL表的引擎

    有很多种方法可以将表的存储引擎转换成另一种引擎.每种方法都有其优缺点,在这里介绍四种方法: 选择优先级(pt-online-schema-change > 创建与查询 > 导出和导入 &g ...

  10. 在什么情况下使用@ResponseBody 注解?

    @Controller @RequestMapping("/") public class HelloController { @RequestMapping(value = &q ...