前面我们学习了JDBC连接相应的数据库,可以对数据进行一些增删改查的操作,但是仍然存在一些冗余。随着技术的进步,这些不能满足当前大数据时代的要求,需要更加方便简洁的方式来操作数据。这时候就引入DBUtils,这是Apache commons组件的一个成员:我们用的是commons-dbutils-1.6.jar。
【简介】
DBUtils是java编程中的数据库操作工具,封装了JDBC的操作,即JDBC的简化开发工具包。
三个核心功能类:
QueryRunner中提供对sql语句操作的API---update和query
ResultSetHandler接口,用于定义select操作后,怎样封装结果集。
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法。
【-QueryRunner之update和query】
update(Connection conn, Stringsql, Object... params) ,用来完成表数据的增加、删除、更新操作。
query(Connection conn, Stringsql,ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作。
【结果集的处理】
ResultSetHandler对结果集的处理。
public class DBUtilsDemo {
private static Connection conn = MyJDBCUtils.getConnection();
private static QueryRunner qr=new QueryRunner();
public static void main(String[] args) throws Exception {
update(); //进行更新
query();
}
//利用DBUtils工具类中的类QueryRunner进行更新
public static void update() throws Exception{
QueryRunner qr=new QueryRunner();
String sql="insert into sort(sname,sprice,sdesc) values(?,?,?)";//占位符
Object [] params ={ "lisi", 12.12, "张三添加数据库"};
int row1 = qr.update(conn, sql,params);
System.out.println(row1);
MyJDBCUtils.close();
//不用DBUtils工具类更新
/*String sql="INSERT INTO sort(sname,sprice,sdesc) VALUES(?,?,?)";
PreparedStatement prs = conn.prepareStatement(sql);
prs.setObject(1, "zhangsan");
prs.setObject(2, "12345");
prs.setObject(3, "张三添加数据库");
int row = prs.executeUpdate();
System.out.println(row);*/
}
//利用DBUtils工具类查询,对返回的结果集进行处理
public static void query() throws SQLException{
String sql="select * from sort where sid>?";
Object [] params={3};
//第一种方法将结果集的第一行封装成数组
Object[] obj = qr.query(conn, sql, new ArrayHandler(),params);
//遍历数组
for (Object object : obj) {
System.out.print(object+"\t");
}
//第二种方法将结果集的每一行封装成数组,然后添加到集合中
List<Object[]> query = qr.query(conn, sql, new ArrayListHandler(), params);
for (Object[] objects : query) {
for (Object object : objects) {
System.out.print(object+"\t");
}
System.out.println();
}
//第三种方法将结果集的第一行封装成实体对象
sort query2 = qr.query(conn, sql, new BeanHandler<sort>(sort.class), params);
System.out.println(query2);
//第四种方法将结果集的每一行封装成实体对象,然后放在集合中
List<sort> query3 = qr.query(conn, sql, new BeanListHandler<sort>(sort.class), params);
for (sort sort : query3) {
System.out.println(sort);
}
//第五种将结果集的一列返回到集合中
List<Object> query4 = qr.query(conn, sql, new ColumnListHandler<>("sname"), params);
for (Object object : query4) {
System.out.println(object);
}
//第六种,当结果集为单个行单个列是用ScalarHandler返回long型
String sql1="select count(*) from sort where sid>'4' ";
long query5 = qr.query(conn, sql1, new ScalarHandler<Long>());
System.out.println(query5);
//第七种 将结果集第一行返回到map集合中
Map<String, Object> map = qr.query(conn, sql, new MapHandler(), params);
for (String key : map.keySet()) {
System.out.print(key+" "+map.get(key));
}
//第八种 将结果集的每一条放在map中,然后存在集合中
List<Map<String, Object>> query6 = qr.query(conn, sql, new MapListHandler(), params);
for (Map<String, Object> map2 : query6) {
for (String key:map2.keySet()) {
System.out.print(key+" "+map2.get(key));
}
System.out.println();
}
}
}
【小结】
自我感觉,DBUtils工具类在查询中更能体现它的方便,对数据库的查询直接可以根据需要定义,大大简化代码,提高效率。