JDBC--DBUtils的使用
2015-12-02 16:14
369 查看
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语句
4、使用QueryRunner进行查询操作:
--使用QuneryRunner的query()方法进行查询时,需要传入对应的ResultSetHandler的实现类对象以完成对结果集的处理,其返回类型取决于ResultSetHandler中handle方法的返回类型,可以使用以下几种ResultSetHandler:
--1)自定义结果集处理:
--源码分析queryRunner.query()方法
上面的方法中,在获取到结果集之后(第8行),将调用传入的ResultSetHandler对象的handle方法对结果集处理(第9行),这里将调用自定义的实现类中的handle方法。
--2)BeanHandler:将查询的结果集的第一条记录转化为传入的对应的class类的对象并返回:
--3)BeanListHandler:将查询的结果集转化为传入的对应的class类的对象列表并返回:
--4)MapHandler:将查询的结果集的第一条记录转化为Map并返回,其中key值对应列名,value对应列的值:
--5)MapLsitHandler:将查询的结果集转化为MapList并返回,其中key值对应列名,value对应列的值:
--6)ScalarHandler:将结果集的第一行第一列转化的数据成数值(可以是基础类型、String类和Date类):
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()方法
public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh,Object... params) throws SQLException { PreparedStatement stmt = null; ResultSet rs = null; T result = null; try { stmt = this.prepareStatement(conn, sql); this.fillStatement(stmt, params); rs = this.wrap(stmt.executeQuery()); result = rsh.handle(rs); } catch (SQLException e) { this.rethrow(e, sql, params); } finally { try { close(rs); } finally { close(stmt); } } return result; }
上面的方法中,在获取到结果集之后(第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);
相关文章推荐
- PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)
- 西数硬盘WD5000AZDX-00SC2B0硬盘进水不通电无法识别开盘数据恢复
- 感知机的实现和感知机对偶形式的实现
- Spring--quartz中cronExpression配置说明
- 基础练习 报时助手
- Android listView 中嵌套不同的item
- Codeforces Round #334 (Div. 2)C. Alternative Thinking(贪心)
- Delphi字段类型和不同数据库对应.txt
- Nginx httpS server配置
- leetcode@ [205] Isomorphic Strings
- IDirect3DDevice9::SetTexture的stage参数
- PowerDesigner(七)-数据库的生成和修改
- CentOS7下编译openjdk
- Oracle存储过程详解
- (六)redis 006-key操作
- javascript实现获取浏览器版本、浏览器类型
- Spring MVC 3.1新特性 生产者、消费者请求限定
- [leetcode] 135. Candy
- PowerDesigner(六)-物理数据模型(PDM逆向工程)
- vim 笔记