一,概述
1)commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本较低,并且使用dbutils能极大简化jdbc的代码编写量,同时也不会影响程序的性能.
2)去官网下载组件,将相应jar包引入到项目中.我导入的是commons-dbutils-1.6.jar这个jar包.
二,查询
1)查询:自定义结果集封装对象
@Test
public void testQuery() throws Exception {
String sql = "select * from dept where id = ?";
// 1,获得连接
conn = JdbcUtils.getConnection();
// 2,创建DbUtils核心工具类对象
QueryRunner qr = new QueryRunner();
// 3,查询--第四个参数12对应是占位符的数据,就是id=12
DeptBean deptBean = qr.query(conn, sql,
new ResultSetHandler<DeptBean>() {
@Override
public DeptBean handle(ResultSet rs) throws SQLException {
if (rs.next()) {
// 如果有数据,就进来了
DeptBean bean = new DeptBean();
bean.setId(rs.getInt("id"));
bean.setDeptName(rs.getString("deptName"));
return bean;
}
return null;
}
}, 12);
// 4,关闭资源
DbUtils.close(conn);
// 输出数据
System.out.println(deptBean.toString());
}
输出结果:Dept [id=12, deptName=营销部]
JdbcUtils一个获取连接的工具类,在我自己的一篇博客里介绍过.DeptBean是一个标准的javabean,有id(int)和deptName(String)两个属性,dept是数据库中的一张表,对应DeptBean的两个属性.上面代码中,主要就是通过核心工具类QueryRunner的一个方法实现自定义结果集封装对象.然后返回.
2)使用组件提供的结果集封装数据
@Test
public void testQueryOne() throws Exception {
String sql = "select * from dept where id = ?";
// 1,获得连接
conn = JdbcUtils.getConnection();
// 2,创建DbUtils核心工具类对象
QueryRunner qr = new QueryRunner();
// 3,查询--第四个参数16对应是占位符的数据
DeptBean deptBean = qr.query(conn, sql, new BeanHandler<DeptBean>(
DeptBean.class), 16);
// 4,关闭资源
DbUtils.close(conn);
if (deptBean != null) {
// 如果有数据就打印
System.out.println(deptBean.toString());
}
}
主要就是通过BeanHandler来实现数据的封装.
3)BeanHandler的加强版-->BeanListHandler,返回一个List集合
@Test
public void testQueryMany() throws Exception {
String sql = "select * from dept";
conn = JdbcUtils.getConnection();
QueryRunner qr = new QueryRunner();
List<DeptBean> list = qr.query(conn, sql,
new BeanListHandler<DeptBean>(DeptBean.class));
// 关闭资源
DbUtils.close(conn);
for (Object obj : list) {
System.out.println(obj.toString());
}
}
4)不止上面那些好用的方法
@Test
// ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
// ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
// ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
// MapHandler 查询返回结果的第一条记录封装为map
public void testArray() throws Exception {
String sql = "select * from admin";
conn = JdbcUtils.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();
}
还有很多,可翻看官方文档.但是最常用的就是BeanHandler和BeanListHandler...
三,更新(删除,插入,修改)
1)删除与插入
//连接对象
private Connection conn=null;
/**
* 更新
* @throws Exception
*/
@Test
public void testUpdate() throws Exception {
String sql="delete from dept where id =?";
//1,获得连接
conn=JdbcUtils.getConnection();
//2,创建DbUtils核心工具类对象
QueryRunner qr=new QueryRunner();
//3,执行操作,13就代表占位符所表示的参数
qr.update(conn, sql, 13);
//4,关闭连接
DbUtils.close(conn);
}
/**
* 批处理
* @throws Exception
*/
@Test
public void testBatch() throws Exception {
String sql="insert into dept(deptName) values(?)";
//1,获得连接
conn=JdbcUtils.getConnection();
//2.创建DbUtils核心工具类对象
QueryRunner qr=new QueryRunner();
//3,批量插入,注意第三个参数是二维数组
qr.batch(conn, sql, new Object[][]{{"宣传部2017"},{"战略部"}});
DbUtils.close(conn);
}
四,总结
某程序猿:哥,你上面粘的代码了少了修改的啊?只有插入和删除...本人:就当是课后作业吧.