DBUtils
* Apache commons的一个组件
* 只能操作表中的数据,不能操作表结构
* 常用功能
* QueryRunner中提供对sql语句操作的API.
* ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
* DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
* 使用步骤
* 导入Jar包:commons-dbutils-1.6.jar
* 通过DriverManger注册驱动
* 通过DriverManager获取连接对象Connection
* 通过DBUtils的QueryRunner使用对应的Connection完成SQL操作
* 针对执行查询语句时,通过不同的ResultSetHandler子类可以在查询数据后,直接将得到的数据封装为想要的数据组织方式
QueryRunner类
* 用于执行sql语句的工具类
* 构造方法
* QueryRunner qr = new QueryRunner();
* 空参构造,调用方法时需要传入连接对象
* QueryRunner qr = new QueryRunner(pool);
* 带参构造,参数pool是连接池,调用方法是不需要传入连接对象
* 常用方法
* <?> query(conn,sql,alh)
* conn:连接对象
* sql:sql语句
* alh:ResultSetHandler接口的子类
* 返回值类型由ResultSetHandler的子类对象决定
* int update(String sql, Object... params)
* sql:要执行的sql语句
* params:可变参数列表
* 返回值int表示影响的行数
ResultSetHandler子类
* ArrayHandler
* 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
* ArrayListHandler
* 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
* BeanHandler
* 将结果集中第一条记录封装到一个指定的javaBean中。
* BeanListHandler
* 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
* ColumnListHandler
* 将结果集中指定的列的字段值,封装到一个List集合中
* KeyedHandler
* 将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。
* MapHandler
* 将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值
* MapListHandler
* 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。
* ScalarHandler
* 它是用于单数据。例如select count(*) from 表操作。
ResultSetHandler子类用法举例:
* ArrayHandler
@Test
public void demo() throws Exception {
// 通过工具类获取连接对象
Connection conn = JDBCUtil.getConn();
// 使用DBUtils的QueryRunner完成数据读取
QueryRunner qr = new QueryRunner();
// 准备sql语句
String sql = "SELECT * FROM tb_poi";
// 创建Handanler对象
ArrayHandler handler = new ArrayHandler();
// ArrayHandler,将第一行组织为一个数组
Object[] firstRow = qr.query(conn, sql,handler);
// 遍历
for (Object object : firstRow) {
System.out.print(object + " ");
}
}
* ArrayListHandler
@Test
public void demo() throws Exception {
// 通过工具类获取连接对象
Connection conn = JDBCUtil.getConn();
// 使用DBUtils的QueryRunner完成数据读取
QueryRunner qr = new QueryRunner();
// 准备sql语句
String sql = "SELECT * FROM tb_poi";
// 创建Handanler对象
ArrayListHandler handler = new ArrayListHandler();
// ArrayListHandler,将所有数据组织为一个集合,每一行组织为一个数组
List<Object[]> list = qr.query(conn, sql, handler);
// 遍历所有数据的集合,依次获取到每一行(每一行都是一个数组)
for (Object[] rowdata : list) {
// 遍历每行,依次获取每行的每列数据
for (int i = 0; i < rowdata.length; i++) {
System.out.print(rowdata[i] + " ");
}
// 每次遍历后换行
System.out.println();
}
}
* BeanHandler
@Test
public void demo() throws Exception {
// 通过工具类获取连接对象
Connection conn = JDBCUtil.getConn();
// 使用DBUtils的QueryRunner完成数据读取
QueryRunner qr = new QueryRunner();
// 准备sql语句
String sql = "SELECT id, username,password FROM tb_user";
// 创建Handanler对象
BeanHandler<User> handler = new BeanHandler<User>(User.class);
// BeanHandler将第一行组织为一个指定javabean对象
User user = qr.query(conn, sql, handler);
}
* BeanListHandler
@Test
public void demo() throws Exception {
// 通过工具类获取连接对象
Connection conn = JDBCUtil.getConn();
// 使用DBUtils的QueryRunner完成数据读取
QueryRunner qr = new QueryRunner();
// 准备sql语句
String sql = "SELECT id, username,password FROM tb_user";
// 创建Handanler对象
BeanListHandler<User> handler = new BeanListHandler<User>(User.class);
// BeanListHandler将所有数据组织为多个指定javabean对象,每一行组织为一个javabean对象
List<User> users = qr.query(conn, sql, handler);
// 遍历
for (User thisUser : users) {
System.out.println(thisUser);
}
}
* ColumnListHandler
@Test
public void demo() throws Exception {
// 通过工具类获取连接对象
Connection conn = JDBCUtil.getConn();
// 使用DBUtils的QueryRunner完成数据读取
QueryRunner qr = new QueryRunner();
// 准备sql语句
String sql = "SELECT * FROM tb_user";
// 创建Handanler对象
ColumnListHandler<String> handler = new ColumnListHandler<String>("password");
// ColumnListHandler将数据集中指定的列封装成一个集合,本例中封装的是password列
List<String> list = qr.query(conn, sql, handler);
System.out.println(list);
}
* keyedHandler
@Test
public void demo() throws Exception {
// 通过工具类获取连接对象
Connection conn = JDBCUtil.getConn();
// 使用DBUtils的QueryRunner完成数据读取
QueryRunner qr = new QueryRunner();
// 准备sql语句
String sql = "SELECT * FROM tb_user";
// keyedHandler将每一行封装为一个map,在将该map作为value封装到另一个map中,Key为指定的列,如下指定第一列为key
KeyedHandler<Integer> handler = new KeyedHandler<Integer>(1);
Map<Integer, Map<String, Object>> query = qr.query(conn, sql, handler);
System.out.println(query);
}
* MapHandler
@Test
public void demo() throws Exception {
// 通过工具类获取连接对象
Connection conn = JDBCUtil.getConn();
// 使用DBUtils的QueryRunner完成数据读取
QueryRunner qr = new QueryRunner();
// 准备sql语句
String sql = "SELECT id, username,password FROM tb_user";
// 创建Handanler对象
MapHandler handler = new MapHandler();
// MapHandler将第一行数据组织为一个指定Map集合对象
Map<String, Object> rowMap = qr.query(conn, sql, handler);
//遍历map
Set<String> keySet = rowMap.keySet();
for (String key : keySet) {
System.out.println("key:" + key + " value:" + rowMap.get(key));
}
}
* MapListHandler
@Test
public void demo() throws Exception {
// 通过工具类获取连接对象
Connection conn = JDBCUtil.getConn();
// 使用DBUtils的QueryRunner完成数据读取
QueryRunner qr = new QueryRunner();
// 准备sql语句
String sql = "SELECT id, username,password FROM tb_user";
// 创建Handanler对象
MapListHandler handler = new MapListHandler();
// 执行sql语句,组织返回结果,本次使用的是MapHandler,功能为将第一行组织为一个指定Map集合对象
List<Map<String, Object>> data = qr.query(conn, sql, handler);
for (Map<String, Object> row : data) {
Set<String> keySets = row.keySet();
for (String key : keySets) {
System.out.println("key:" + key + " value:" + row.get(key));
}
}
}
* ScalarHandler
@Test
public void demo() throws Exception {
// 通过工具类获取连接对象
Connection conn = JDBCUtil.getConn();
// 使用DBUtils的QueryRunner完成数据读取
QueryRunner qr = new QueryRunner();
// 准备sql语句
String sql = "SELECT COUNT(id) FROM tb_user";
// 创建Handler对象
ScalarHandler<Long> handler = new ScalarHandler<Long>();
Long query = qr.query(conn, sql, handler);
System.out.println(query);
}
001-SE-0019-DBCP及DBUtils
最新推荐文章于 2022-11-06 19:22:24 发布