commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。
DbUtils是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的(总结:简化jdbc的操作 )
下载组件,引入jar文件:commons-dbutils-1.6.jar
1.DbUtils:连接数据库对象
作用:关闭资源、加载驱动
2.QueryRunner:SQL语句的操作对象
构造方法:
(1)QueryRunner():创建一个与数据库无关的QueryRunner对象,后期再操作数据库的会后,需要手动给一个Connection对象,它可以手动控制事务。
Connection.setAutoCommit(false); 设置手动管理事务
Connection.commit(); 提交事务
(2)QueryRunner(DataSource ds):创建一个与数据库关联的queryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。
DataSource:数据库连接池对象。
(3)ResultSetHandle:这一接口执行处理一个jaca.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更容易。这一组件提供了ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, MapHandler, MapListHandler, and ScalarHandler等执行程序。ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。如果你发现这七个执行程序中没有任何一个提供了你想要的服务,你可以自己写执行程序并使用它。
// 删除数据
@Test
public void test() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql
String sql = "delete from student where id=?";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
queryRunner.update(conn, sql, 3);
// 关闭数据库连接
DbUtils.close(conn);
}
// 添加数据
@Test
public void test1() throws Exception {
// 创建数据连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql
String sql = "insert into student(sname,gender) values(?,?)";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
queryRunner.update(conn, sql, "王力宏", "男");
// 关闭数据库连接
DbUtils.close(conn);
}
// 更改数据
@Test
public void test2() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql语句
String sql = "update student set sname=? where id=?";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
queryRunner.update(conn, sql, "chenkefo", 2);
// 关闭数据库连接
DbUtils.close(conn);
}
// 批处理
@Test
public void batch() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql语句
String sql = "insert into student(sname,gender) values(?,?)";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
queryRunner.batch(conn, sql,new Object[][] { { "林俊杰", "男" }, { "谢霆锋", "男" } });
// 关闭数据库连接
DbUtils.close(conn);
}
// 查询,自定义结果集封装数据
@Test
public void test3() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql语句
String sql = "select * from student where id=?";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
Student student = queryRunner.query(conn, sql,
new ResultSetHandler() {
public Student handle(ResultSet rs) throws SQLException {
Student student = new Student();
if (rs.next()) {
student.setId(rs.getInt("id"));
student.setSname(rs.getString("sname"));
student.setGender(rs.getString("gender"));
}
return student;
}
}, 1);
// 输出结果
System.out.println(student);
// 关闭数据库连接资源
DbUtils.close(conn);
}
Student [id=1, sname=陈柯佛, gender=男]
// 查询,使用组件提供的结果集对象封装数据
// beanhandler:查询返回单个对象
@Test
public void test4() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql语句
String sql = "select * from student where id=?";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
Student student = queryRunner.query(conn, sql,
new BeanHandler(Student.class), 1);
// 输出结果
System.out.println(student);
// 关闭数据库连接资源
DbUtils.close(conn);
}
Student [id=1, sname=陈柯佛, gender=男]
// BeanListHandler: 查询返回list集合,集合元素是指定的对象
@Test
public void test5() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql语句
String sql = "select * from student";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
List list = queryRunner.query(conn, sql,
new BeanListHandler(Student.class));
// 输出结果
System.out.println(list);
// 关闭数据库连接资源
DbUtils.close(conn);
}
[Student [id=1, sname=陈柯佛, gender=男], Student [id=2, sname=周杰伦, gender=男], Student [id=3, sname=方文山, gender=男]]
// ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
@Test
public void test6() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql语句
String sql = "select * from student";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
Object[] object = queryRunner.query(conn, sql, new ArrayHandler());
// 输出结果
for (int i = 0; i < object.length; i++) {
System.out.println(object[i]);
}
// 关闭数据库连接资源
DbUtils.close(conn);
}
1
陈柯佛
男
// ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
@Test
public void test7() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql语句
String sql = "select * from student";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
List
1 陈柯佛 男
2 周杰伦 男
3 方文山 男
//ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
@Test
public void test8() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql语句
String sql = "select count(*) from student";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
Long num = queryRunner.query(conn, sql, new ScalarHandler());
// 输出结果
System.out.println("总共有:"+num+"条数据");
// 关闭数据库连接资源
DbUtils.close(conn);
}
总共有:3条数据
//MapHandler 查询返回结果的第一条记录封装为map
@Test
public void test9() throws Exception {
// 创建数据库连接对象
Connection conn = JdbcUtil.getConnection();
// 创建sql语句
String sql = "select * from student";
// 创建Dbutils核心工具类对象
QueryRunner queryRunner = new QueryRunner();
// 执行sql
Map<String, Object> map = queryRunner.query(conn, sql, new MapHandler());
// 输出结果
Set<String> keySet = map.keySet();
for(String key : keySet){
Object value = map.get(key);
System.out.println(key+"="+value);
}
// 关闭数据库连接资源
DbUtils.close(conn);
}
id=1
sname=陈柯佛
gender=男