commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量。开始用之前,
下载组件,引入jar文件 : commons-dbutils-1.6.jar。
QueryRunner类QueryRunner类是dbutils的核心工具类对象,简化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。定义了所有的与数据库操作的方法(查询、更新)。
1.Int update(Connection conn, String sql, Object param); 执行更新带一个占位符的sql
2. Int update(Connection conn, String sql, Object… param); 执行更新带多个占位符的sql
3. T query(Connection conn ,String sql, ResultSetHandler<T> rsh, Object... params)
4. Int update( String sql, Object param);
5. Int update( String sql, Object… param);
6. Int[] batch( String sql, Object[][] params)
注意: 如果调用DbUtils组件的操作数据库方法,没有传入连接对象,那么在实例化QueryRunner对象的时候需要传入数据源对象: QueryRunner qr = new QueryRunner(ds);
DbUtils提供的封装结果的一些对象:
1) BeanHandler: 查询返回单个对象
2) BeanListHandler: 查询返回list集合,集合元素是指定的对象
3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
5) ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
6) MapHandler 查询返回结果的第一条记录封装为map
下面的代码是关于dbutils的一些适用:
public class dbutil_query {
private Connection conn;
//1.自定义结果集来封装数据
@Test
public void test1() throws Exception{
String sql = "select * from admin where id=?";
// 获取连接
conn = JdbcUtil.getConnection();
// 创建DbUtils核心工具类对象
QueryRunner qr = new QueryRunner();
// 查询
Admin admin = qr.query(conn, sql, new ResultSetHandler<Admin>() {
public Admin handle(ResultSet rs) throws SQLException {
// TODO Auto-generated method stub
if(rs.next()){
Admin admin = new Admin();
admin.setId(rs.getInt("id"));
admin.setUserName(rs.getString("userName"));
admin.setPwd(rs.getString("pwd"));
return admin;
}
return null;
}
}, 2);
// 测试
System.out.println(admin);
// 关闭
conn.close();
}
//2.使用组件提供的结果集对象封装数据(查询)
//(1)BeanHandler:查询返回单个对象
@Test
public void test2() throws Exception {
String sql = "select * from admin where id=?";
// 获取连接
conn = JdbcUtil.getConnection();
// 创建DbUtils核心工具类对象
QueryRunner qr = new QueryRunner();
// 查询返回单个对象
Admin admin = qr.query(conn, sql, new BeanHandler<Admin>(Admin.class), 3);
System.out.println(admin);
conn.close();
}
//(2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
@Test
public void test3() throws Exception {
String sql = "select * from admin";
conn = JdbcUtil.getConnection();
QueryRunner qr = new QueryRunner();
// 查询全部数据
List<Admin> list = qr.query(conn, sql, new BeanListHandler<Admin>(Admin.class));
System.out.println(list);
conn.close();
}
//(3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
@Test
public void test4() throws Exception {
String sql = "select * from admin";
conn = JdbcUtil.getConnection();
QueryRunner qr = new QueryRunner();
// 查询
Object[] obj = qr.query(conn, sql, new ArrayHandler());
//List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
//Long num = qr.query(conn, sql, new ScalarHandler<Long>());
//Map<String, Object> map = qr.query(conn,sql, new MapHandler());
conn.close();
}
//(4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
@Test
public void test5() throws Exception {
String sql = "select * from admin";
conn = JdbcUtil.getConnection();
QueryRunner qr = new QueryRunner();
// 查询
//Object[] obj = qr.query(conn, sql, new ArrayHandler());
List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
//Long num = qr.query(conn, sql, new ScalarHandler<Long>());
//Map<String, Object> map = qr.query(conn,sql, new MapHandler());
conn.close();
}
//(5)ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
@Test
public void test6() throws Exception {
String sql = "select * from admin";
conn = JdbcUtil.getConnection();
QueryRunner qr = new QueryRunner();
// 查询
//Object[] obj = qr.query(conn, sql, new ArrayHandler());
//List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
Long num = qr.query(conn, sql, new ScalarHandler<Long>());
//Map<String, Object> map = qr.query(conn,sql, new MapHandler());
conn.close();
}
//(6)MapHandler 查询返回结果的第一条记录封装为map
@Test
public void test7() throws Exception {
String sql = "select * from admin";
conn = JdbcUtil.getConnection();
QueryRunner qr = new QueryRunner();
// 查询
//Object[] obj = qr.query(conn, sql, new ArrayHandler());
//List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
//Long num = qr.query(conn, sql, new ScalarHandler<Long>());
Map<String, Object> map = qr.query(conn,sql, new MapHandler());
conn.close();
}
}