DbUtils组件
作用
简化jdbc操作
使用包
commons-dbutils-1.6.jar点击打开链接
API
|-- DbUtils 关闭资源、加载驱动
|-- QueryRunner 组件的核心工具类:定义了所有的与数据库操作的方法(查询、更新)
Int update(Connection conn, String sql, Object param); 执行更新带一个占位符的sql
Int update(Connection conn, String sql, Object… param); 执行更新带多个占位符的sql
Int[] batch(Connection conn, String sql, Object[][] params) 批处理
T query(Connection conn ,String sql, ResultSetHandler<T> rsh, Object... params) 查询方法
Int update( String sql, Object param);
Int update( String sql, Object… param);
Int[] batch( String sql, Object[][] params)
注意: 如果调用DbUtils组件的操作数据库方法,没有传入连接对象,那么在实例化QueryRunner对象的时候需要传入数据源对象: QueryRunner qr = new QueryRunner(ds);
DbUtils提供的封装结果的一些Handler对象:
1) BeanHandler: 查询返回单个对象
2) BeanListHandler: 查询返回list集合,集合元素是指定的对象
3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
5) ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
6) MapHandler 查询返回结果的第一条记录封装为map
更新案例
package com.cn.dbUtils;
import java.sql.Connection;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;
import com.cn.util.JdbcUtil;
public class UpdateDemo {
private Connection conn;
/**
* 更新
* @throws Exception
*/
@Test
public void testUpdate() throws Exception {
String sql = "delete from users where id = ?";
//获取连接对象
conn = JdbcUtil.getConnection();
//创建DbUtils核心工具类对象
QueryRunner qr = new QueryRunner();
//更新。Execute an SQL INSERT, UPDATE, or DELETE query with a single replacement parameter.
qr.update(conn, sql, 9);
conn.close();
}
/**
* 更新批处理
* @throws Exception
*/
@Test
public void testBatch() throws Exception {
String sql = "insert into users(name, password) values(?,?)";
//获取连接
conn = JdbcUtil.getConnection();
//创建DbUtils核心工具类对象
QueryRunner qr = new QueryRunner();
//批量处理
qr.batch(conn, sql, new Object[][]{{"user1", "pwd1"},{"user2", "pwd2"},{"user3", "pwd3"}});
//关闭资源
conn.close();
}
}
查询案例
package com.cn.dbUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import com.cn.entity.User;
import com.cn.util.JdbcUtil;
public class QueryDemo {
private Connection conn;
/**
* 一、查询,自定义结果集封装数据
* @throws Exception
*/
@Test
public void testQuery() throws Exception {
//获取连接
conn = JdbcUtil.getConnection();
//sql语句
String sql = "select * from users where id = ?";
QueryRunner qr = new QueryRunner();
/*ArrayListHandler list = new ArrayListHandler();
List<Object[]> list2 = qr.query(conn, sql, list);
for(Object[] objs : list2){
for(int i=0; i<objs.length; i++){
System.out.print(objs[i] + "\t");
}
System.out.println();
}*/
User user = qr.query(conn, sql, new ResultSetHandler<User>() {
@Override
public User handle(ResultSet rs) throws SQLException {
while(rs.next()){
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
}
return null;
}
}, 3);
sql = "select * from users";
List<User> list = qr.query(conn, sql, new ResultSetHandler<List<User>>() {
@Override
public List<User> handle(ResultSet rs) throws SQLException {
List<User> list = new ArrayList<User>();
while(rs.next()){
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
list.add(user);
}
return list;
}
});
//测试
System.out.println(user);
System.out.println(list.toString());
//关闭
conn.close();
}
/**
* 二、查询, 使用组件提供的结果集对象封装数据
* @throws Exception
*/
//2.1 BeanHandler: 查询返回单个对象
@Test
public void testQueryOne() throws Exception {
//sql
String sql = "select * from users where id = ?";
//获取连接
conn = JdbcUtil.getConnection();
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//查询返回单个对象
User user = qr.query(conn, sql, new BeanHandler<>(User.class), 10);
//测试输出
System.out.println(user);
//关闭
conn.close();
}
//2.3 BeanListHandler: 查询返回单个对象
@Test
public void testQueryList() throws Exception {
//sql
String sql = "select * from users";
//获取连接
conn = JdbcUtil.getConnection();
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//查询返回单个对象
// List<User> list = qr.query(conn, sql, new BeanListHandler<User>(User.class));//查询返回list集合,集合元素是指定的对象
// System.out.println(list.toString());
// Map<String, User> map = qr.query(conn, sql, new BeanMapHandler<String,User>(User.class));//查询返回map集合,集合元素是指定的对象
// System.out.println(map.toString());
// List<Object[]> arrList = qr.query(conn, sql, new ArrayListHandler()); //把查询的每一行都封装为对象数组,再添加到list集合中
// //测试输出
// for(int i=0; i<arrList.size(); i++){
// Object[] objs = arrList.get(i);
// for(Object obj : objs){
// System.out.print(obj.toString() + "\t");
// }
// System.out.println();
// }
Map<String, Object> map = qr.query(conn, sql, new MapHandler());//查询返回结果的第一条记录封装为map
System.out.println(map.toString());
sql = "select count(*) from users";
Long num = qr.query(conn, sql, new ScalarHandler<Long>());//查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
//测试输出
System.out.println(num);
//关闭
conn.close();
}
}