DbUtils简介
根据官网的介绍,DbUtils是一种 JDBC Utility Component (翻译过来大概就是:JDBC实用部件),故名思意,和数据库操作有关
官网上的简介也称之为 JDBC helper library ,由此可知,DbUtils是一个工具类库,用来进行数据库通信的
用法
官方原文:The core classes/interfaces in DbUtils are QueryRunner and ResultSetHandler(在 DbUtils 中的核心类/接口为 QueryRunner 和 ResultSetHandler)
所以,我们需要掌握这两个类的使用,这篇文章先阐述第一个类
QueryRunner
QueryRunner中一共有6种方法:
- execute(执行SQL语句)
- batch(批量处理语句)
- insert(执行INSERT语句)
- insertBatch(批量处理INSERT语句)
- query(SQL中 SELECT 语句)
- update(SQL中 INSERT, UPDATE, 或 DELETE 语句)
我们主要介绍最后两种(最常用):
源码:
query方法
-
T query(String sql, ResultSetHandler rsh)
不需要替换参数来执行已给予的SELECT语句 -
- T query(String sql, ResultSetHandler rsh, Object… params)
需要一个或多个替换参数来执行已给予的SELECT语句,并返回一种对象结果
- T query(String sql, ResultSetHandler rsh, Object… params)
update方法
-
int update(Connection conn, String sql)
不需要替换参数来执行INSERT, UPDATE
DELETE语句 -
int update(Connection conn, String sql, Object… params)
需要一个或多个替换参数以及一个数据库连接来执行INSERT, UPDATE
DELETE语句 -
int update(Connection conn, String sql, Object param)
需要一个替换参数,以及一个数据库连接来执行INSERT, UPDATE
DELETE语句 -
int update(String sql)
不需要替换参数来执行已给予的INSERT, UPDATE
DELETE语句 -
int update(String sql, Object… params)
需要一个或多个替换参数来执行INSERT, UPDATE
DELETE语句(参数无需带有连接) -
int update(String sql, Object param)
不需要替换参数来执行INSERT, UPDATE
DELETE语句(参数无需带有连接)Demo
1. 建表
2. 数据源
我们采用上次配置的c3p0-config.xml文件,只是将数据库名称改为test:
然后配置数据源:
//获取数据源 private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); //QueryRunner需要一个数据源作为参数 private static QueryRunner queryRunner = new QueryRunner(dataSource);
3. 添加信息
//添加纪录 private static void add(){ String id, name, gender; for (int i = 0; i < 10; i++) { id = String.valueOf(i); name = "name" + String.valueOf(i); gender = i % 2 == 0 ? "male" : "female"; try{ String sql = "INSERT INTO test VALUES(?,?,?);"; Object[] params = {id, name, gender}; queryRunner.update(sql, params); }catch(SQLException e){ throw new RuntimeException(e); } } }
执行完添加操作后,在MySQL Workbench中查询的结果显示,数据已添加:
4. 编辑信息以及删除信息
编辑信息:
//按照给定ID编辑信息 private static void edit(String id){ try{ String sql = "UPDATE test SET name = ?, gender = ? WHERE id = ?;"; Object[] params = {"change", "female", id}; queryRunner.update(sql,params); }catch (SQLException e){ throw new RuntimeException(e); } } public static void main(String[] args){ edit("0"); }
编辑结果:
删除信息:
//按照给定ID删除信息 private static void delete(String id){ try{ String sql = "DELETE FROM test WHERE id = ?"; queryRunner.update(sql, id); }catch (SQLException e){ throw new RuntimeException(e); } } public static void main(String[] args){ delete("0"); }
删除结果:
5. 查看所有信息
在使用 query 方法时,需要使用 ResultSetHandler, 具体使用方式将在另一篇文章中阐述
将查询的结果,使用 ArrayListHandler,存入ArrayList,以数组形式打印:
private static void showAll(){ try{ String sql = "SELECT * FROM test;"; List<Object[]> list = queryRunner.query(sql, new ArrayListHandler()); for (Object[] aList : list) { System.out.println(Arrays.toString(aList) + " "); } }catch (SQLException e){ throw new RuntimeException(e); } }
关于QueryRunner对数据库的CRUD操作就介绍到此了。
抄录文献: