【JDBC核心】commons-dbutils
commons-dbutils
简介
commons-dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,它是对 JDBC 的简单封装,学习成本极低,并且使用 commons-dbutils 能极大简化 JDBC 编码的工作量,同时也不会影响程序的性能。
主要类:
- QueryRunner:提供数据库操作的一些重载的
update()和query()方法; - ResultSetHandler:此接口用于处理数据库查询结果得到的结果集,不同的结果集有不同的子类实现;
- DbUtils:提供如关闭连接、装载 JDBC 驱动程序等常规工作的工具类,里面的所有方法都是静态的。
使用
QueryRunner 类:
- 该类简化了 SQL 查询,它与 ResultSetHandler 组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量**。
- 该类提供了两个构造器:
- 默认的构造器;
- 需要一个
javax.sql.DataSource来作参数的构造器;
- 主要方法:
- 更新
public int update(Connection conn, String sql, Object... params) throws SQLException用来执行一个更新(插入、更新或删除)操作。
- 插入
public <T> T insert(Connection conn,String sql,ResultSetHandler<T> rsh, Object... params) throws SQLException只支持插入操作。
- 批处理
public int[] batch(Connection conn,String sql,Object[][] params)throws SQLException插入、更新或删除操作。public <T> T insertBatch(Connection conn,String sql,ResultSetHandler<T> rsh,Object[][] params)throws SQLException只支持插入操作。
- 查询
public Object query(Connection conn, String sql, ResultSetHandler rsh,Object... params) throws SQLException执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
- 更新
ResultSetHandler 接口:
- 该接口用于处理
java.sql.ResultSet,将数据按要求转换为另一种形式; - 主要实现类:
ArrayHandler把结果集中的第一行数据转成对象数组。ArrayListHandler把结果集中的每一行数据都转成一个数组,再存放到 List 中。BeanHandler将结果集中的第一行数据封装到一个对应的 JavaBean 实例中。BeanListHandler将结果集中的每一行数据都封装到一个对应的 JavaBean 实例中,存放到List里。ColumnListHandler将结果集中某一列的数据存放到 List 中。KeyedHandler(name):将结果集中的每一行数据都封装到一个 Map 里,再把这些 map 再存到一个 map 里,其 key 为指定的 key。MapHandler将结果集中的第一行数据封装到一个 Map 里,key 是列名,value 就是对应的值。MapListHandler将结果集中的每一行数据都封装到一个 Map里,然后再存放到 List。ScalarHandler查询单个值对象。
package cn.parzulpan.jdbc.ch09;
import cn.parzulpan.jdbc.bean.Customer;
import cn.parzulpan.jdbc.util.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
/**
* @Author : parzulpan
* @Time : 2020-12-01
* @Desc : DBUtils QueryRunner 使用
*/
public class QueryRunnerTest {
// 插入记录
@Test
public void testInsert() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "insert into customers(name,email,birth)values(?,?,?)";
int update = queryRunner.update(connection, sql, "劲儿", "jiner@163.com", "1995-12-29");
System.out.println("添加了 " + update + " 条记录");
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 删除记录
@Test
public void testDelete() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "delete from customers where id < ?";
int update = queryRunner.update(connection, sql, 3);
System.out.println("删除了 " + update + " 条记录");
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 修改记录
@Test
public void testUpdate() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "update customers set email = ? where name = ?";
int update = queryRunner.update(connection, sql, "jinerR@163.com", "劲儿");
System.out.println("修改了 " + update + " 条记录");
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询一条记录,BeanHandler
@Test
public void testQuery() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select id,name,email,birth from customers where id = ?";
// BeanHandler 是 ResultSetHandler 的实现类,用于封装表中的一条记录
BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);
Customer customer = queryRunner.query(connection, sql, handler, 23);
System.out.println(customer); // Customer{id=23, name='劲儿', email='jinerR@163.com', birth=1995-12-29}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询一条记录,MapHandler
@Test
public void testQueryMap() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select id,name,email,birth from customers where id = ?";
MapHandler mapHandler = new MapHandler();
Map<String, Object> map = queryRunner.query(connection, sql, mapHandler, 23);
System.out.println(map); // {name=劲儿, birth=1995-12-29, id=23, email=jinerR@163.com}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询多条记录,BeanListHandler
@Test
public void testQueryList() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select id,name,email,birth from customers where id < ?";
BeanListHandler<Customer> listHandler = new BeanListHandler<>(Customer.class);
List<Customer> customerList = queryRunner.query(connection, sql, listHandler, 13);
customerList.forEach(System.out::println);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询多条记录,MapListHandler
@Test
public void testQueryMapList() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select id,name,email,birth from customers where id < ?";
MapListHandler mapListHandler = new MapListHandler();
List<Map<String, Object>> mapList = queryRunner.query(connection, sql, mapListHandler, 13);
mapList.forEach(System.out::println);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询特殊值,类似于最大的,最小的,平均的,总和,个数相关的数据,ScalarHandler
@Test
public void testQueryScalar() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select count(*) from customers where id < ?";
ScalarHandler scalarHandler = new ScalarHandler();
Object query = queryRunner.query(connection, sql, scalarHandler, 20);
System.out.println(query);
String sql1 = "select max(birth) from customers";
ScalarHandler handler = new ScalarHandler();
Object query1 = queryRunner.query(connection, sql1, handler);
System.out.println(query1);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
}
练习和总结
【JDBC核心】commons-dbutils的更多相关文章
- 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...
- java JDBC (六) org.apache.commons.dbutils 增删改
dbutils是apache封装了JDBC的工具类,比mysql-connector更方便些 下载地址:http://commons.apache.org/proper/commons-dbutils ...
- java JDBC (七) org.apache.commons.dbutils 查询
package cn.sasa.demo1; import java.sql.Connection; import java.sql.SQLException; import java.util.Li ...
- 写一个ORM框架的第一步(Apache Commons DbUtils)
新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦. 一 ...
- 【JDBC&Dbutils】JDBC&JDBC连接池&DBUtils使用方法(重要)
-----------------------JDBC---------- 0. db.properties文件 driver=com.mysql.jdbc.Driver url=jdbc: ...
- JDBC工具类-DButils(QueryRunner-ResultSetHandler)
简述: DBUtils是Java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. DBUtils三个核心功能: QUeryRunne ...
- JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表
本文目录: 1.自定义JDBC框架 ——数据库元数据:DataBaseMetaData 2.自定义JDBC框架 ——数据库元数据:DataBaseMetaData ...
- Apache Commons DbUtils 快速上手
原文出处:http://lavasoft.blog.51cto.com/62575/222771 Hibernate太复杂,iBatis不好用,JDBC代码太垃圾,DBUtils在简单与优美之间取得了 ...
- Java -- JDBC 学习--使用 DBUtils
Apache—DBUtils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdb ...
- Java连接数据库 #04# Apache Commons DbUtils
索引 通过一个简单的调用看整体结构 Examples 修改JAVA连接数据库#03#中的代码 DbUtils并非是什么ORM框架,只是对原始的JDBC进行了一些封装,以便我们少写一些重复代码.就“用” ...
随机推荐
- bootstrap table处理后台返回的数据
- STL——容器(Map & multimap)的大小
1. Map & multimap 的大小 map.size(); //返回容器中元素的数目 map.empty();//判断容器是否为空, 容器中有内容将会返回 false 代码示例 ...
- oracle 11g调优常用语句
1.查询表的基数及选择性 select a.column_name, b.num_rows, a.num_distinct cardinality, round( ...
- JVM的艺术—JAVA内存模型
*喜欢文章,动动手指点个赞 * 引言 亲爱读者你们好,关于jvm篇章的连载,前面三章讲了类加载器,本篇文章将进入jvm领域的另一个知识点,java内存模型.彻底的了解java内存模型,是有必要的.只要 ...
- HBase按照TimeStamp删除数据
#!/bin/bash #两种时间输入,一种是输入起始日期,另一种是直接输入hbase里面数据的起始时间戳 if [ $# != 5 ];then echo 'usage:sh byTimestamp ...
- [日常摸鱼]UVA11424&11426 GCD - Extreme
话说UVa的机子跑的好快呀- (两题题意一样,前一题数据范围比较小) 题意:求$\sum_{i=1}^{n-1} \sum_{j=i+1}^n gcd(i,j),n<4\times 10^6$ ...
- JQuery ajax request及Java服务端乱码问题及设置
今天花了半天功夫才搞定2个乱码问题 1. 原先一直用form提交,现在改作JQuery ajax 提交,发现乱码. 2. window.location url中含有中文提交后,乱码. 第一个问题: ...
- matplotlib的学习8-scatter散点图
import matplotlib.pyplot as plt import numpy as np n = 1024 # data size #生成1024个呈标准正太分布的二维数组(平均数为0,方 ...
- day020|python之面向对象基础2
面向对象基础2 目录 面向对象基础2 7 对象与类型 7.1 类即类型 7.1.1 变量的三个指标 7.1.2 变量类型 7.2 list.append()方法原理 8 对象的高度整合 8.1 通过面 ...
- Python循环列表的方法
python循环列表的几种方法: 第一,依次打印列表中的各项值. 1 #!usr/bin/env python3 2 #!-*- Coding:utf-8 -*- 3 4 ''' 5 多种循环列表的方 ...