commons-dbutils 是 Apache 組織提供的一個(gè)開源 JDBC工具類庫(kù),它是對(duì)JDBC的簡(jiǎn)單封裝,學(xué)習(xí)成本極低,并且使用dbutils能極大簡(jiǎn)化jdbc編碼的工作量,同時(shí)也不會(huì)影響程序的性能。
API介紹:
org.apache.commons.dbutils.QueryRunner
org.apache.commons.dbutils.ResultSetHandler
工具類
org.apache.commons.dbutils.DbUtils
DbUtils類
DbUtils :提供如關(guān)閉連接、裝載JDBC驅(qū)動(dòng)程序等常規(guī)工作的工具類,里面的所有方法都是靜態(tài)的。主要方法如下:
- public static void close(…) throws java.sql.SQLException: DbUtils類提供了三個(gè)重載的關(guān)閉方法。這些方法檢查所提供的參數(shù)是不是NULL,如果不是的話,它們就關(guān)閉Connection、Statement和ResultSet。
- public static void closeQuietly(…): 這一類方法不僅能在Connection、Statement和ResultSet為NULL情況下避免關(guān)閉,還能隱藏一些在程序中拋出的SQLEeception。
- public static void commitAndCloseQuietly(Connection conn): 用來提交連接,然后關(guān)閉連接,并且在關(guān)閉連接時(shí)不拋出SQL異常。
- public static boolean loadDriver(java.lang.String driverClassName):這一方裝載并注冊(cè)JDBC驅(qū)動(dòng)程序,如果成功就返回true。使用該方法,你不需要捕捉這個(gè)異常ClassNotFoundException。
QueryRunner類
該類簡(jiǎn)單化了SQL查詢,它與ResultSetHandler組合在一起使用可以完成大部分的數(shù)據(jù)庫(kù)操作,能夠大大減少編碼量。
QueryRunner類提供了兩個(gè)構(gòu)造方法:
默認(rèn)的構(gòu)造方法
需要一個(gè) javax.sql.DataSource 來作參數(shù)的構(gòu)造方法。
QueryRunner類的主要方法
- public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:執(zhí)行一個(gè)查詢操作,在這個(gè)查詢中,對(duì)象數(shù)組中的每個(gè)元素值被用來作為查詢語句的置換參數(shù)。該方法會(huì)自行處理 PreparedStatement 和 ResultSet 的創(chuàng)建和關(guān)閉。
- public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 幾乎與第一種方法一樣;唯一的不同在于它不將數(shù)據(jù)庫(kù)連接提供給方法,并且它是從提供給構(gòu)造方法的數(shù)據(jù)源(DataSource) 或使用的setDataSource 方法中重新獲得 Connection。
- public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 執(zhí)行一個(gè)不需要置換參數(shù)的查詢操作。
- public int update(Connection conn, String sql, Object[] params) throws SQLException:用來執(zhí)行一個(gè)更新(插入、更新或刪除)操作。
- public int update(Connection conn, String sql) throws SQLException:用來執(zhí)行一個(gè)不需要置換參數(shù)的更新操作。
ResultSetHandler接口
該接口用于處理 java.sql.ResultSet,將數(shù)據(jù)按要求轉(zhuǎn)換為另一種形式。
ResultSetHandler 接口提供了一個(gè)單獨(dú)的方法:Object handle (java.sql.ResultSet .rs)。
ResultSetHandler 接口的實(shí)現(xiàn)類
- ArrayHandler:把結(jié)果集中的第一行數(shù)據(jù)轉(zhuǎn)成對(duì)象數(shù)組。
- ArrayListHandler:把結(jié)果集中的每一行數(shù)據(jù)都轉(zhuǎn)成一個(gè)數(shù)組,再存放到List中。
- BeanHandler:將結(jié)果集中的第一行數(shù)據(jù)封裝到一個(gè)對(duì)應(yīng)的JavaBean實(shí)例中。
- BeanListHandler:將結(jié)果集中的每一行數(shù)據(jù)都封裝到一個(gè)對(duì)應(yīng)的JavaBean實(shí)例中,存放到List里。
- ColumnListHandler:將結(jié)果集中某一列的數(shù)據(jù)存放到List中。
- KeyedHandler(name):將結(jié)果集中的每一行數(shù)據(jù)都封裝到一個(gè)Map里,再把這些map再存到一個(gè)map里,其key為指定的key。
- MapHandler:將結(jié)果集中的第一行數(shù)據(jù)封裝到一個(gè)Map里,key是列名,value就是對(duì)應(yīng)的值。
- MapListHandler:將結(jié)果集中的每一行數(shù)據(jù)都封裝到一個(gè)Map里,然后再存放到List