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類。
今天,在傳智播客的課堂上,我們學習了 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