JDBC連接------DbUtils工具包的使用

JDBC連接------DbUtils工具包的使用

目錄

 

1、DbUtils是什麼?

2、DbUtils官網下載鏈接

 3、DbUtils核心類

3.1、QueryRunner 中提供了對sql語句的操作的api

3.2、ResultSetHandler接口,用於定義select操作後,怎樣封裝結果集

3.2.1、常用方法的測試代碼如下(2-1-1)

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工具類。

JDBC連接------C3P0連接池

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操作數據庫極大的減少了代碼量。整個人都好很多了!

能力尚淺,有待進步,如有不足,不吝賜教!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章