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操作數據庫極大的減少了代碼量。整個人都好很多了!
能力尚淺,有待進步,如有不足,不吝賜教!