你的位置:首页 > Java教程

[Java教程]dbutils基本使用


dbutils的查询,主要用到的是query方法,增加,修改和删除都是update方法,update方法就不讲了

只要创建ResultSetHandler接口不同的实现类对象就可以得到想要的查询结果,该接口的实现类有

接下来讲解一些经常用到的:

下面的代码都是要抛出异常的,为了看起来简洁,我在这里把异常去掉了

ArrayHandler类:把结果集的'第一行'记录封装成数组,
  测试代码:

QueryRunner qr = new QueryRunner(dataSource);  String sql = "select * from user";  Object[] objArr = qr.query(sql, new ArrayHandler());}

View Code


ArrayListHandler类:把结果集的每一行封装到一个数组中,然后把这些数组放到一个集合中返回
  测试代码:

QueryRunner qr = new QueryRunner(dataSource);  String sql = "select * from user";  List<Object[]> list = qr.query(sql, new ArrayListHandler());}

View Code


BeanHandler类:把结果集的'第一行'记录作为一个javaBean对象返回(前提:结果集的字段名(可以用取别名) 和 javaBean的属性名保持一致)
  测试代码:

QueryRunner qr = new QueryRunner(dataSource);String sql = "select * from user";User user = qr.query(sql, new BeanHandler<User>(User.class));

View Code


BeanListHandler类:把结果集的每一行封装成一个javaBean对象,然后把这些对象放入到一个List集合中返回
  测试代码:

QueryRunner qr = new QueryRunner();String sql = "select * from user";List<User> userList = qr.query(conn, sql, new BeanListHandler<User>(User.class));

View Code


ScalarHandler类:返回'结果集'中第一行的某个值, 具体视构造方法的参数而定, 返回值类型视表中字段的类型而定
有3个构造方法, 用于聚合查询比较好
new ScalarHandler(); 返回结果集中第一行第一列的值
new ScalarHandler(int columnIndex); 返回结果集中第一行第columnIndex列的值(列从1开始计算)
new ScalarHandler(String columnName); 返回结果集中第一行名字为columnName的值
  测试代码:

QueryRunner qr = new QueryRunner();String sql = "select id, username, hobby as hob from user";Integer obj1 = qr.query(conn, sql, new ScalarHandler<Integer>()); //结果集中第一行第一列的值String obj2 = qr.query(conn, sql, new ScalarHandler<String>(2)); //结果集中第一行第2列的值String obj3 = qr.query(conn, sql, new ScalarHandler<String>("hob")) //结果集中第一行名字为hob

View Code


ColumnListHandler类:将结果集中某一列的数据存放到List中, 与上面ScalarHandler类似的有3个构造方法
  测试代码:

QueryRunner qr = new QueryRunner();String sql = "select * from user";// List<Integer> idList = qr.query(conn, sql, new ColumnListHandler<Integer>());// List<String> idList = qr.query(conn, sql, new ColumnListHandler<String>("hobby"));List<String> list = qr.query(conn, sql, new ColumnListHandler<String>(4));

View Code


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

QueryRunner qr = new QueryRunner();String sql = "select * from user";Map<String, Object> map = qr.query(conn, sql, new MapHandler());

View Code


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

QueryRunner qr = new QueryRunner();String sql = "select * from user";List<Map<String, Object>> listMap = qr.query(conn, sql, new MapListHandler());

View Code

我这里都是举例的不带参数的,如果有参数,在sql中参数用?表示,然后使用带参数的query方法按顺序依次把参数传入即可

有关连接数据库的,请参考我另一篇随笔:c3p0连接数据库的3种方式