Apache-DbUtils 是 Apache 组织提供的开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用DbUtils能极大简化JDBC编码的工作量,同时也不会影响程序的性能。因此DbUtils成为很多不喜欢Hibernate的公司的首选。
使用Apache-DbUtils之前需要导入它的jar包,官网上会有,或者找国内镜像站找也可以。
例:对Customers表进行插入
@Test
public void testInsert() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection2();
String sql = "insert into customers(name,email,birth)values(?,?,?)";
int updateCount = runner.update(conn, sql, "薛之谦","xuezhiqian@168.com",new Date(87654323456L));
if(updateCount != 0) {
System.out.println("修改了" + updateCount + "条记录");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResource(conn, null);
}
}
org.apache.commons.dbutils.ResultSetHandler
定义了查询相关的接口,它的实现类根据其接口进行了具体的操作编写
ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)
接口的主要实现类:
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler :将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
MapHandler :将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler :将结果集中的每一行数据都封装到一个Map里,然后再存放到List
ScalarHandler :查询单个值对象
例:查询操作
BeanHandler:ResultSetHandler接口的实现类,用于封装表中的一条记录。
@Test
public void testQuery1() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection2();
String sql = "select id,name,email,birth from customers where id = ?";
BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);
Customer customer = runner.query(conn, sql, handler, 23);
System.out.println(customer);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResource(conn, null);
}
}
BeanListHandler:ResultSetHandler接口的实现类,用于封装表中的多条记录构成的集合。
@Test
public void testQuery2() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection2();
String sql = "select id,name,email,birth from customers where id < ?";
BeanListHandler<Customer> handler = new BeanListHandler<>(Customer.class);
List<Customer> list = runner.query(conn, sql, handler, 23);
list.forEach(System.out::println);//打印出多条记录
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResource(conn, null);
}
}
MapHandler:ResultSetHandler接口的实现类,对应表中的一条记录。 将字段及相应字段的值作为Map中的Key和Value。
@Test
public void testQuery3() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection2();
String sql = "select id,name,email,birth from customers where id = ?";
MapHandler handler = new MapHandler();
Map<String, Object> map = runner.query(conn, sql, handler, 23);
System.out.println(map);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResource(conn, null);
}
}
MapListHandler:ResultSetHandler接口的实现类,对应表中的多条记录。将字段及相应字段的值作为Map中的Key和Value,将这些map添加到List中
@Test
public void testQuery4() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection2();
String sql = "select id,name,email,birth from customers where id < ?";
MapListHandler handler = new MapListHandler();
List<Map<String, Object>> list = runner.query(conn, sql, handler, 23);
list.forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResource(conn, null);
}
}
ScalarHandler:用于查询特殊值
@Test
public void testQuery5() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection2();
String sql = "select count(*) from customers";
ScalarHandler handler = new ScalarHandler();
Long count = (Long)runner.query(conn, sql, handler);
System.out.println(count);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResource(conn, null);
}
}
@Test
public void testQuery6() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection2();
String sql = "select max(birth) from customers";
ScalarHandler handler = new ScalarHandler();
Date maxBirth = (Date) runner.query(conn, sql, handler);
System.out.println(maxBirth);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResource(conn, null);
}
}
org.apache.commons.dbutils.DbUtils
DbUtils工具类提供如关闭连接、装载JDBC驱动程序等常规操作
例:资源关闭
public static void closeResource1(Connection conn,Statement ps,ResultSet rs){
// try {
// DbUtils.close(conn);
// } catch (SQLException e) {
// e.printStackTrace();
// }
// try {
// DbUtils.close(ps);
// } catch (SQLException e) {
// e.printStackTrace();
// }
// try {
// DbUtils.close(rs);
// } catch (SQLException e) {
// e.printStackTrace();
// }
DbUtils.closeQuietly(conn);
DbUtils.closeQuietly(ps);
DbUtils.closeQuietly(rs);
}
其中可能会出现不少的小问题,请多多包含
感谢大家的支持,关注,评论,点赞!
参考资料:尚硅谷_宋红康_JDBC核心技术