dbutils的查询,主要用到的是query方法,增加,修改和删除都是update方法,update方法就不讲了
只要创建ResultSetHandler接口不同的实现类对象就可以得到想要的查询结果,该接口的实现类有
接下来讲解一些经常用到的:
下面的代码都是要抛出异常的,为了看起来简洁,我在这里把异常去掉了
ArrayHandler类:把结果集的'第一行'记录封装成数组,
测试代码:
QueryRunner qr = new QueryRunner(dataSource); String sql = "select * from user"; Object[] objArr = qr.query(sql, new ArrayHandler()); }
ArrayListHandler类:把结果集的每一行封装到一个数组中,然后把这些数组放到一个集合中返回
测试代码:
QueryRunner qr = new QueryRunner(dataSource); String sql = "select * from user"; List<Object[]> list = qr.query(sql, new ArrayListHandler()); }
BeanHandler类:把结果集的'第一行'记录作为一个javaBean对象返回(前提:结果集的字段名(可以用取别名) 和 javaBean的属性名保持一致)
测试代码:
QueryRunner qr = new QueryRunner(dataSource); String sql = "select * from user"; User user = qr.query(sql, new BeanHandler<User>(User.class));
BeanListHandler类:把结果集的每一行封装成一个javaBean对象,然后把这些对象放入到一个List集合中返回
测试代码:
QueryRunner qr = new QueryRunner(); String sql = "select * from user"; List<User> userList = qr.query(conn, sql, new BeanListHandler<User>(User.class));
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
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));
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值
测试代码:
QueryRunner qr = new QueryRunner(); String sql = "select * from user"; Map<String, Object> map = qr.query(conn, sql, new MapHandler());
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
测试代码:
QueryRunner qr = new QueryRunner(); String sql = "select * from user"; List<Map<String, Object>> listMap = qr.query(conn, sql, new MapListHandler());
我这里都是举例的不带参数的,如果有参数,在sql中参数用?表示,然后使用带参数的query方法按顺序依次把参数传入即可
有关连接数据库的,请参考我另一篇随笔:c3p0连接数据库的3种方式