BDutils的使用
文章目录
DButils的介绍
为了更加简单方便地使用JDBC,Apache组织提供了DButils工具,它是一个数据库的操作组件,实现了对JDBC的简单封装,在性能不受影响的条件下简化JDBC的操作。目前最新的版本应该是1.7的版本
QueryRunner的简介
QueryRunner类的使用极大的简化SQL语句的执行代码,与ResultSetHandler组合可以完成数据库的各种操作,QueryRunner类提供了 带有参数 的构造方法,此方法以javax.sql.DataSource为参数传入到QueryRunner的构造方法中获取Connection对象, 并且 针对不同的数据库操作,提供了不同的方法。
-
query(String sql ,ResultSetHandler rsh, Object … params)
查询方法,这里的第二个 参数是ResultSetHandler 接口,查询的的是结果的信息,要求返回的是JavaBean ,泛型就是Bean类,在此需要建立接口的匿名实现类,重写handle并返回Bean对象,这里大概先知道有这么回事就行,一会看代码时具体解释, 这里的params是可变的参数,根据 SQL语句的具体情况设置参数。
-
update(String sql, Object … params)
用与删除,插入,更新数据库信息,同样的params是可变参数。
ResultSetHandler接口
简介
ResultSetHandler接口用于处理RestultSet结果集,它可以将结果集中的数据转为不同形式,根据结果的数据类型的不同,ResultSetHandler提供了几种常见的实现类,具体如下:
- BeanHander:结果集分装到JavaBean中, 保存一条数据。
- BeanListHandler:将结果的每一条数据都分装到JavaBean实例中,存放到List,也就是保存多条数据
QueryRunner的基本使用
添加数据
@Test
public void testinsert() throws SQLException {
ComboPooledDataSource datasource = new ComboPooledDataSource();
QueryRunner queryrunner = new QueryRunner(datasource);
queryrunner.update("insert into balance values(?,?)", "Bob",192);
}
更新数据
还是刚刚的方法只需要更sql语句就行~
@Test
public void testupdate() throws SQLException {
QueryRunner queryrunner = new QueryRunner(new ComboPooledDataSource());
queryrunner.update("update balance set balance = ? where name = ?", 8160, "Bob");
}
删除数据
@Test
public void testdelete() throws SQLException {
QueryRunner queryrunner = new QueryRunner(new ComboPooledDataSource());
queryrunner.update("delete from balance where name=?", "Bob");
}
查询数据
了解JavaBean
在使用DButils之前查询数据之前,我们首先大概地了解一下JavaBean
JavaBean 是java语言开发中 大的一个可以重复使用地软件组件,本质上就是 一个类,规范JavaBean的开发,Sun公司发布了JavaBean的规范,标准的JavaBean组件需要遵循如下规则:
- 必须有一个公共的,无参的构造方法, 这个构造方法可以是编译器自动产生的构造方法
- 它需要提供访问器(get)和修改器(set)让外部程序设置获取JavaBean的属性。
例如:
public class student{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
基本查询
根据数据库的信息建立JavaBean实例:
package Bean;
public class account {
private String name;
private int balance
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
@Override
public String toString() {
return "account [name=" + name + ", balance=" + balance + "]";
}
}
查询代码:
@Test
public void testupdate() throws SQLException {
QueryRunner queryrunner = new QueryRunner(new ComboPooledDataSource());
queryrunner.update("update balance set balance = ? where name = ?", 8160, "Bob");
}
@Test
public void testquery() throws SQLException {
QueryRunner queryrunner = new QueryRunner(new ComboPooledDataSource());
account acc =queryrunner.query("select * from balance where name = ?", new ResultSetHandler<account>() {
@Override
public account handle(ResultSet rs) throws SQLException {
account acc = new account();
while(rs.next()) {
String name = rs.getString("name");
int balance = rs.getInt("balance");
acc.setBalance(balance);
acc.setName(name);
}
return acc;
}
},"Bob");
System.out.println(acc.toString());
}
使用query(String sql ,ResultSetHandler rsh, Object … params),方法注意:第二个参数是 ResultSetHandler 的匿名实现接口,而不是接口 的实例化,这一点类似与匿名内部类(Anonymous inner class)重写接口的里的方法,泛型为JavaBean对象实例对象中,保存数据的信息。
使用BeanHandler查询单一数据
@Test
public void testquery() throws SQLException {
QueryRunner queryrunner = new QueryRunner(new ComboPooledDataSource());
account acc = queryrunner.query("select * from balance where name = ?", new BeanHandler<account>(account.class), "Bob");
System.out.println(acc.toString());
}
BeanHandler分装对应的JavaBean实例,保存单一的数据。
使用BeanListHandler多个数据
@Test
public void testquery() throws SQLException {
QueryRunner queryrunner = new QueryRunner(new ComboPooledDataSource());
List<account> list = queryrunner.query("select * from balance ?", new BeanListHandler<account>(account.class));
for(account acc :list) {
System.out.println(acc.toString());
}
}
BeanListHandler 保存多个数据信息,并且用List集合保存。
总结
我们通过使用数据库连接池的方式简化了数据的连接,通过DButils的方式 简化了数据库的添加,删除,查询, 更新一系列操作,JDBC编程这一方面内容大概就齐全了,以后在写数据库访问层时,用简化的步骤就可以实现。