JDBC连接------DbUtils工具包的使用
目录
3.1、QueryRunner 中提供了对sql语句的操作的api
3.2、ResultSetHandler接口,用于定义select操作后,怎样封装结果集
3.3、DbUtils类,它就是一个工具类,定义了关闭资源与事物处理的方法
1、DbUtils是什么?
DbUtils是apache下的一个JDBC轻量级封装的工具包,其最核心的特性就是结果集的封装,简化jdbc连接DAO层到的操作,可以直接将sql查询出来的结果集封装成javaBean。大大简化了程序员的工作量。
2、DbUtils官网下载链接
http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi
图(2-1)
3、DbUtils核心类
DBUtils的三个核心类
QueryRunner,ResultSetHandler,DbUtils.
3.1、QueryRunner 中提供了对sql语句的操作的api
第一种操作sql方法 提供数据源
构造方法 QueryRunner(DataSource) 创建核心类,并提供数据源(连接池),内部自己维护Connection
普通方法:
update(String sql,Object...params) 执行数据库DML语句
query(String sql,ResultSetHandler,Object...params) 执行数据库DQL语句,并将查询结果封装到对象中
第二种操作SQL方法 不提供数据源,但提供链接
构造方法 QueryRuner() 创建核心类,没有提供数据源(连接池),在进行具体操作时,需要手动提供Connection
普通方法:
update(Connection conn,String sql ,Object ... params)
query(Connection conn,String sql,ResultSetHandler,Object...parms)
3.2、ResultSetHandler接口,用于定义select操作后,怎样封装结果集
常用的方法:
ArrayHandler :将结果中的第一条记录封装到一个指定的数组中
ArrayListHandler :将结果集中的每一条记录以数组形式都封装到一个指定的集合中
BeanHandler :将结果集中的第一条记录封装到一个指定的javaBean中
BeanListHandler :将结果集中的每一条记录封装到指定的javaBean总,将这些javaBean再封装到List集合中
ScalarHandler :它是用于单个数据。例如select count(*) from students
ColumnListHandler : 将结果集中指定的列字段值,封装到一个List集合中
3.2.1、常用方法的测试代码如下(2-1-1)
public class Test {
public static void main(String[] args) throws SQLException {
// array();
arrayList();
// bean();
// beanList();
// scalar();
// columnList();
}
/*
ArrayHandler
将结果集的第一条记录添加到一个Object数组中
查询1条结果时使用
查询uid=3的user的记录
*/
public static void array() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
String sql = "select * from students ";
Object[] objs = qr.query(sql, new ArrayHandler());
System.out.println(Arrays.toString(objs));
}
/*
ArrayListHandler
将结果集的每条记录都添加到一个Object数组中
将多个Object数组放入到一个List集合中
查询多条记录时使用
查询所有users中的记录
*/
public static void arrayList() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
String sql = "select * from students";
List<Object[]> list = qr.query(sql,new ArrayListHandler());
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
}
/*
BeanHandler
将结果集的第一条记录封装到一个指定的javaBean对象中
查询1条结果时使用
查询uid=3的user的记录
*/
public static void bean() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
String sql = "select * from users where uid = ?";
//创建BeanHandler对象指定数据封装到User对象中
User u = qr.query(sql,new BeanHandler<User>(User.class),3);
System.out.println(u);
}
/*
BeanListHandler
将结果集的每一条记录都封装到一个指定的javaBean对象中
然后将多个对象 放入一个list集合中
查询多条记录时使用
*/
public static void beanList() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
String sql = "select * from students";
List<User> list = qr.query(sql,new BeanListHandler<User>(User.class));
for (User user : list) {
System.out.println(user);
}
}
/*
ScalarHander
一般用于单个数据的获取
构造方法
ScalarHander() 只有一个结果时
ScalarHander(列名)
ScalarHander(第几列)
查询users表中有多少条记录
*/
public static void scalar() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
String sql = "select count(*) from users";
long l = qr.query(sql,new ScalarHandler<Long>());
System.out.println(l);
}
/*
ColumnListHandler
将指定列的数据 放入到一个list集合中
ColumnListHandler() 查询结果只有一列时使用
ColumnListHandler(列名)
ColumnListHandler(第几列)
查询所有的用户名
*/
public static void columnList () throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
String sql = "select * from students";
List<String> list = qr.query(sql,new ColumnListHandler<String>());
System.out.println(list);
}
}
代码中使用的C3P0Utils工具类是上一篇文章“JDBC连接------C3P0连接池”中写的C3P0Utils工具类。
3.3、DbUtils类,它就是一个工具类,定义了关闭资源与事物处理的方法
常用方法(源码+注释)
//关闭连接
public static void close(Connection conn) throws SQLException {
if (conn != null) {
conn.close();
}
}
//关闭结果集
public static void close(ResultSet rs) throws SQLException {
if (rs != null) {
rs.close();
}
}
//关闭执行sql的对象
public static void close(Statement stmt) throws SQLException {
if (stmt != null) {
stmt.close();
}
}
//安静的关闭,后台会自动处理异常,没有Quietly关键字的close方法不会自动处理异常
public static void closeQuietly(Connection conn, Statement stmt, ResultSet rs) {
try {
closeQuietly(rs);
} finally {
try {
closeQuietly(stmt);
} finally {
closeQuietly(conn);
}
}
}
//事务提交并安静的关闭
public static void commitAndCloseQuietly(Connection conn) {
try {
commitAndClose(conn);
} catch (SQLException var2) {
;
}
}
//事务回滚并安静的关闭
public static void rollbackAndCloseQuietly(Connection conn) {
try {
rollbackAndClose(conn);
} catch (SQLException var2) {
;
}
}
总结:
使用DbUtils操作数据库极大的减少了代码量。整个人都好很多了!
能力尚浅,有待进步,如有不足,不吝赐教!