JDBC--DBUtils的使用

1、commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

2、相关API:

--org.apache.commons.dbutils.QueryRunner

--org.apache.commons.dbutils.ResultSetHandle

--工具类:org.apache.commons.dbutils.DbUtils

3、使用QueryRunner进行更新操作:

--update方法:可执行delete,insert,update的sql语句

public void testQueryRunner_update(){
    Connection conn = null;
    //创建QueryRunner的实现类
    QueryRunner queryRunner = new QueryRunner();
    String sql = "DELETE FROM customers WHERE id > ?";

    try{
        //获取数据库连接
        conn = JDBCUtils.getConnection();
        //调用QueryRunner的update方法实现更新操作
        int rows = queryRunner.update(conn, sql, 97);
        System.out.println(rows + "rows deleted.");
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        //释放数据库资源
        JDBCUtils.release(conn, null, null);
    }
}

4、使用QueryRunner进行查询操作:

--使用QuneryRunner的query()方法进行查询时,需要传入对应的ResultSetHandler的实现类对象以完成对结果集的处理,其返回类型取决于ResultSetHandler中handle方法的返回类型,可以使用以下几种ResultSetHandler:

--1)自定义结果集处理:

/**
*自定义ResultSetHandler,并重写handle方法,对结果集进行处理
*/
class MyResultSetHandler implements ResultSetHandler{
    @Override
    public Object handle(ResultSet rs) throws SQLException {
        List<Customer> list = new ArrayList<>();
        while(rs.next()){
            BigDecimal id = rs.getBigDecimal(1);
            String name = rs.getString(2);
            Date birth = rs.getDate(3);

            Customer customer = new Customer(id, name, birth);
            list.add(customer);
        }
        return list;
    }

}

@Test
public void testResultSetHandler(){
    Connection conn = null;
    QueryRunner queryRunner = new QueryRunner();
    try{
        conn = JDBCUtils.getConnection();
        String sql = "SELECT id \"id\", name \"name\", birth \"birth\" FROM customers where id < 5";
        Object customers = queryRunner.query(conn, sql,
                new MyResultSetHandler());

        System.out.println(customers);
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        JDBCUtils.release(conn, null, null);
    }
}

--源码分析queryRunner.query()方法

 1 public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh,Object... params) throws SQLException {
 2     PreparedStatement stmt = null;
 3     ResultSet rs = null;
 4     T result = null;
 5     try {
 6         stmt = this.prepareStatement(conn, sql);
 7         this.fillStatement(stmt, params);
 8         rs = this.wrap(stmt.executeQuery());
 9         result = rsh.handle(rs);
10     } catch (SQLException e) {
11         this.rethrow(e, sql, params);
12     } finally {
13         try {
14             close(rs);
15         } finally {
16             close(stmt);
17         }
18     }
19     return result;
20 }

上面的方法中,在获取到结果集之后(第8行),将调用传入的ResultSetHandler对象的handle方法对结果集处理(第9行),这里将调用自定义的实现类中的handle方法。

--2)BeanHandler:将查询的结果集的第一条记录转化为传入的对应的class类的对象并返回:

 Customer customer = queryRunner.query(conn, sql,new BeanHandler(Customer.class));
 System.out.println(customer);

--3)BeanListHandler:将查询的结果集转化为传入的对应的class类的对象列表并返回:

 List<Customer> customers = queryRunner.query(conn, sql,new BeanListHandler(Customer.class));
 System.out.println(customers);

--4)MapHandler:将查询的结果集的第一条记录转化为Map并返回,其中key值对应列名,value对应列的值:

 Map<String, Object> customer = queryRunner.query(conn, sql,new MapHandler());
 System.out.println(customer);

--5)MapLsitHandler:将查询的结果集转化为MapList并返回,其中key值对应列名,value对应列的值:

List<Map<String, Object>> customers = queryRunner.query(conn, sql,new MapListHandler());
System.out.println(customers);

--6)ScalarHandler:将结果集的第一行第一列转化的数据成数值(可以是基础类型、String类和Date类):

String sql = "SELECT name FROM customers WHERE id = 5";
String name = (String)queryRunner.query(conn, sql,new ScalarHandler());
System.out.println(name);
时间: 2024-10-09 14:29:47

JDBC--DBUtils的使用的相关文章

利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)

最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口: 1.public Connection getConnection()   获得数据库的连接 2.public boolean updateByPreparedStatement(String sql, List<Object>params)throws SQLException  更新数据库

2017年6月短学期培训代码总结 -----JDBC

本次代码主要描述了本地数据库后,使用JAVA语言进行 增 删 改 查,具体代码如下: 接口类代码 package cn.neusoft.mybatis.dao; import java.util.List; import cn.neusoft.mybatis.pojo.Userinfo; public interface UserinfoDao { //插入用户信息的插入       Userinfo 实体类可以携带  用户信息    public boolean addUser(Userinf

Android 之JDBC

JDBC(Java DataBase Connectivity)是使用 Java 存取数据库系统的标准解决方案,它将不同数据库间各自差异API与标准 SQL语句分开看待,实现数据库无关的 Java操作接口. JDBC程序访问数据库的步骤  步骤一:加载JDBC驱动程序:Class.forName("com.mysql.jdbc.Driver");Oracle10g:oracle.jdbc.driver.OracleDriver;MySQL5:com.mysql.jdbc.Driver;

jdbc操作mysql

本文讲述2点: 一. jdbc 操作 MySQL .(封装一个JdbcUtils.java类,实现数据库表的增删改查) 1. 建立数据库连接 Class.forName(DRIVER); connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 2.用PrepareStatement执行sql语句 pstmt = connection.prepareStatement(sql); 3. 获得执行Sql结果(int res

JDBC的操作步骤和实例

转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/45689023 ?创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),   这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.my

Http&amp;Tomcat

前端 服务器端 数据库 html css js web层: jsp+servlet struts2 springMVC service层: sping dao层: jdbc DBUtils hibernate mybatis   前端----(请求)---->服务器端   -----(jdbc+sql)---->数据库 服务器端----(响应)----->前端 客户端 <----------->服务器端 客户端通过http协议访问web应用服务器(服务器端) web应用服务器

Oracle系列:(20)事务

回顾什么是事务? 一个不可分割的子操作形成一个整体,该整体要么全部执行成功,要么全部执行失败.例如:转帐 回顾为什么要用事务? 如果不用事务的话,为转帐为例,可能出现一个用户钱增加了,另一个用户钱不变 回顾编程中,事务可用于哪一层? 事务放在业务层 回顾jdbc编程中,如何使用事务? connection.setAutoCommit(false); pstmt.executeUpdate(); connection.commit(); connection.rollback(); 回顾hiber

短学期小结1

下载myeclipse Navicat for MySQL 连接数据库并使用JAVA语言实现 增 删 改 查,具体代码如下: 接口类UserinfoDao代码 package cn.neusoft.mybatis.dao; import java.util.List; import cn.neusoft.mybatis.pojo.Userinfo; public interface UserinfoDao { //插入用户信息的插入       Userinfo 实体类可以携带  用户信息  

短学期小结(1)

[插入用户信息.删除.查询方法的代码如下:] package cn.neusoft.mybatis.dao; import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List; import cn.neusoft.mybatis.jdbc.Dbutils;import cn.neusoft.mybatis.pojo.Userinfo; public cla

java深入探究16-mybatis

链接:http://pan.baidu.com/s/1skJ4TNB 密码:koo9 1.引入mybatis jsbc简单易学,上手快,非常灵活构建SQL,效率高但代码繁琐,难以写出高质量的代码 hibernate不用写SQL,完全以面向对象的方式设计和访问但处理复杂业务时,灵活度差 所以中间产物:mybatis就应运而生 2.mybatis说法和特定 1)MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移