DBUtils
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
DBUtils简介
DBUtils是java编程中的数据库操作实用工具,小巧简单实用,
1.对于数据表的读操作,可以把结果转换成List,Array,Set等java集合,便于程序员操作。
2.对于数据表的写操作,也变得很简单(只需写sql语句)。
DBUtils包括主要类
DbUtils类:启动类
ResultSetHandler接口:转换类型接口,用于你想要将取出的数据转换成什么类型,以下为该接口的实现类
--ArrayHandler类:返回一行记录,把记录中的每个值存放到一个Object数组中并返回。
--ArrayListHandler类:返回多行记录,每一行记录存放入一个Object数组中,然后将数组封装到List集合中返回。
--ColumnListHandler类:取某一列的数据。封装到List中。
--ScalarHandler类:适合获取一行一列数据,一般用于接收返回的统计结果。比如count(*)统计行数。
--BeanHandler类:把记录保存到相应的JavaBeen中转成对象。
--BeanListHandler类:把记录转化成List,使记录为JavaBean类型的对象
--MapHandler类:实现类,返回一行数据,将列名称作为key,对应的值作为value
--MapListHandler类:返回多行数据,每一行记录为一个Map集合,然后将Map集合封装到List当中返回。
QueryRunner类:执行SQL语句的类
实例化该类时需要传入一个数据库的连接(Connection的对象)
DBUtils的使用步骤:
创建项目
导入jar包 工具类 配置文件
commons-dbutils-1.6.jar创建QueryRunner对象
使用对象执行SQL语句
实例:
使用Druid连接池常见工具类,具体方法见JDBC数据库连接池
public class DataSourceUtils {
public static DataSource ds = null ;
static {
InputStream is = DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties") ;
Properties pro = new Properties() ;
try {
pro.load(is);
ds = DruidDataSourceFactory.createDataSource(pro) ;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static DataSource getDataSource() {
return ds ;
}
}
编写测试类对DbUtils进行测试:
public class DbUtilsTest {
@Test
//查询一行数据ArrayHandler
public void testArrayHandler() throws Exception{
//创建QueryRunner对象
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
//执行SQL语句,使用预编译SQL语句 :qr.query(String sql, ResultSetHandler rsh,Object...params);
//使用完整SQL语句:qr.query(String sql, ResultSetHandler rsh);
Object[] o = qr.query("select * from emp where empno=?", new ArrayHandler(),9898) ;
for (Object object : o) {
System.out.print(object + " ");
}
}
@Test
//查询多行数据ListArrayHandler
public void testListArrayHandler() throws Exception{
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
List<Object[]> list = qr.query("select * from emp", new ArrayListHandler()) ;
list.forEach(object ->{
for (Object o : object) {
System.out.print(o + " ");
}
System.out.println();
});
}
@Test
//查询一行数据BeanHandler
public void testBeanHandler() throws Exception{
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
Employee emp = qr.query("select * from emp where empno=9898", new BeanHandler<Employee>(Employee.class)) ;
System.out.println(emp);
}
@Test
//查询多行数据BeanListHandler
public void testBeanListHandler() throws Exception{
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
List<Employee> list = qr.query("select * from emp", new BeanListHandler<>(Employee.class)) ;
list.forEach(System.out::println);
}
@Test
//查询一列数据ColumnListHandler
public void testColumnListHandler() throws Exception{
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
List<String> ename = qr.query("select ename from emp", new ColumnListHandler<String>(1)) ;
ename.forEach(System.out::println);
}
@Test
//返回一行一列数据ScalarHandler()
public void testScalarHandler() throws Exception{
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
long count = qr.query("select count(*) from emp", new ScalarHandler<Long>()) ;
System.out.println(count);
}
@Test
//插入一条数据update()
public void testInsert() throws Exception{
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
Employee e = new Employee(9896, "李春华", "歌姬", 6565, new Date(), 2000, 0, 70) ;
int len = qr.update("INSERT INTO emp VALUES (?,?,?,?,?,?,?,?)", e.getEmpno(),e.getEname(),e.getJob(),e.getMgr(),e.getHiredate(),e.getSal(),e.getComm(),e.getDeptno()) ;
if (len>0) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
}
@Test
//更新一条数据Update()
public void testUpdate() throws Exception{
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
int len = qr.update("UPDATE emp SET job=? WHERE empno=?", "歌姬",9896) ;
if (len > 0) {
System.out.println("更改成功");
} else {
System.out.println("更改失败");
}
}
@Test
//删除一条数据Update()
public void testDelete() throws Exception{
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
int len = qr.update("DELETE FROM emp WHERE empno = ?",9896) ;
if (len > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
}
}
注:当我们使用预编译SQL语句时,要在对应方法的最后面加入相应的值。