Java for memory

          memory is forever

          常用鏈接

          統計

          最新評論

          Apache dblUtils 工具包的使用

          關鍵字: commons-dbutils 工具包的使用
          commons-dbutils 是 Apache 組織提供的一個開源 JDBC 工具類庫,能讓我們更簡單的使用 JDBC 。 
          今天,在傳智播客的課堂上,我們學習了 DBUtils 類庫,知道了如何能夠更方便地使用 JDBC 。以下是我的學習總結。 


          -------------------------------------------------------------------------------- 
          1. API 介紹: 
          <1> org.apache.commons.dbutils.DbUtils:提供如關閉連接、裝載 JDBC 驅動程序等常規工作的工具類; 
          <2> org.apache.commons.dbutils.QueryRunner:該類簡單化了 SQL 查詢,它與 ResultSetHandler 組合在一起使用可以完成大部分的數據庫操作,能夠大大減少編碼量。 
          <3> org.apache.commons.dbutils.ResultSetHandler:該接口用于處理 java.sql.ResultSet,將數據按要求轉換為另一種形式。 
          -------------------------------------------------------------------------------- 

          2. 工具類的方法及示例代碼: 
          <1> DBUtil 類的主要方法如下: 
          a. public static void close(…) throws java.sql.SQLException: DbUtils類提供了三個重載的關閉 

          方法。這些方法檢查所提供的參數是不是 NULL ,如果不是的話,它們就關閉 Connection、Statement 和 ResultSet。 
          b. public static void closeQuietly(…): 這一類方法不僅能在 Connection、Statement 和ResultSet 為 NULL 情況下避免關閉,還能隱藏一些在程序中拋出的 SQLEeception。 
          c. public static void commitAndCloseQuietly(Connection conn): 用來提交連接,然后關閉連接,并 

          且在關閉連接時不拋出 SQL 異常。 
          d. public static boolean loadDriver(java.lang.String driverClassName):這一方裝載并注冊 JDBC 驅動程序,如果成功就返回 true 。使用該方法,你不需要捕捉這個異常 ClassNotFoundException。 


          -------------------------------------------------------------------------------- 
          <2> QueryRunner 類的構造方法及主要方法: 
          a. 默認的構造方法: 
          public QueryRunner(){} 
          b. 需要一個 javax.sql.DataSource 來作參數的構造方法: 
          public QueryRunner(DataSource ds) { 
          this.ds = ds; 

          QueryRunner類的主要方法: 
          c. public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) 
          throws SQLException:執行一個查詢操作,在這個查詢中,對象數組中的每個元素值被用來作為查詢語句的置換參數。該方法會自行處理 PreparedStatement 和 ResultSet 的創建和關閉。更重要的是參數 ResultSetHandler 會把從 ResultSet 中獲得的數據轉換成程序需要的數據格式。 
          d. public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException:幾乎與第一種方法一樣;唯一的不同在于它不將數據庫連接提供給方法,并且它是從提供給構造方法的數據源(DataSource) 或使用的setDataSource 方法中重新獲得 Connection。 
          e. public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException :執行一個不需要置換參數的查詢操作。 
          f. public int update(Connection conn, String sql, Object[] params) throws SQLException:用來執行一個更新(插入、更新或刪除)操作。 
          g. public int update(Connection conn, String sql) throws SQLException:用來執行一個不需要置換 

          參數的更新操作。 


          -------------------------------------------------------------------------------- 
          <3> ResultSetHandler接口 
          ResultSetHandler 接口提供了一個單獨的方法: 
          Object handle (java.sql.ResultSet .rs)。 
          -------------------------------------------------------------------------------- 
          <4> ResultSetHandler 接口的實現類 
          a. ArrayHandler:把結果集中的第一行數據轉成對象數組。 
          b. ArrayListHandler:把結果集中的每一行數據都轉成一個對象數組,再存放到 List 中。 
          c. BeanHandler:將結果集中的第一行數據封裝到一個對應的 JavaBean 實例中。 
          d. BeanListHandler:將結果集中的每一行數據都封裝到一個對應的 JavaBean 實例中,存放到 List里。 
          e. ColumnListHandler:將結果集中某一列的數據存放到 List 中。 
          f. KeyedHandler:將結果集中的每一行數據都封裝到一個 Map 里,然后再根據指定的key把每個 Map 再存放到一個 Map 里。 
          g. MapHandler:將結果集中的第一行數據封裝到一個 Map 里,key 是列名,value 就是對應的值。 
          h. MapListHandler:將結果集中的每一行數據都封裝到一個 Map 里,然后再存放到 List。 
          i. ScalarHandler:將結果集中某一條記錄的其中某一列的數據存成 Object。 
          -------------------------------------------------------------------------------- 
          <5> 下面是簡單對這幾個工具類的測試代碼: 
          QueryRunner runner = null; 
          runner = new QueryRunner();// 獲得QueryRunner類的實例對象 
          Connection conn = null; 
          Class.forName("com.mysql.jdbc.Driver");//加載數據庫驅動 
          conn = DriverManager.getConnection("jdbc:mysql://localhost:3309/bookstore", 
          "root", "1230");// 與數據庫建立連接 
          String sql = "SELECT id, name, title, price, yr, description, saleAmount FROM books 

          WHERE id = ?";// 準備 sql 語句 
          List<Book> list = (List) runner.query(conn, sql, new Object[]{"201"}, new 

          BeanListHandler(Book.class));// 運用 QueryRunner 的方法執行 sql 語句,并獲取結果集,從這里可 

          //以看出運用 commons-dbutils 類庫的方便之處,避免了創建 ResultSet 對象來設置參數的麻煩。 
          System.out.println(books.size()); //輸出 books 的元素個數 


          -------------------------------------------------------------------------------- 
          <6> 其它類和接口: 
          a. org.apache.commons.dbutils.QueryLoader類:屬性文件加載器,主要用于加載屬性文件中的 SQL 到內存中。 
          b. org.apache.commons.dbutils.wrappers.SqlNullCheckedResultSet類:該類是用來對sql語句執行完成 

          之后的的數值進行null的替換。 
          c. org.apache.commons.dbutils.wrappers.StringTrimmedResultSet類:去除ResultSet中字段的左右空格。 
          d. org.apache.commons.dbutils.RowProcessor接口:提供了把結果集的行數據轉換成其它格式的功能。它的實現類是org.apache.commons.dbutils.BasicRowProcessor類。 

          posted on 2009-08-20 14:26 Lanny 閱讀(387) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 汶上县| 淳安县| 晋江市| 凤阳县| 左云县| 洛川县| 确山县| 进贤县| 延津县| 聊城市| 电白县| 崇州市| 遵义市| 中江县| 雷州市| 金溪县| 乌兰浩特市| 海丰县| 滁州市| 扶余县| 科技| 恩施市| 赣榆县| 扎赉特旗| 焉耆| 双江| 浦东新区| 基隆市| 河源市| 文成县| 永州市| 霍山县| 禄丰县| 乌兰察布市| 年辖:市辖区| 衡阳县| 安塞县| 观塘区| 于都县| 雷州市| 兴宁市|