commons.dbutils1.2介紹及使用

來源:互聯網
上載者:User
一、結構介紹

高層結構圖:

wrappers包:

handlers包(部分):

 

二、功能介紹

commons.dbutils是一個對JDBC操作進行封裝的類集,其有如下幾個優點:

(1)沒有可能的資源泄漏,避免了繁鎖的JDBC代碼

(2)代碼更整潔

(3)從ResultSet自動產生JavaBeans屬性

(4)無其他依賴包

 

三、基本使用

基本用到的類有:QueryRunner、ResultSetHandler及其子類等

QueryRunner -- 執行查詢的類,可以執行SELECT、INSERT、UPDATE、DELETE等語句,QueryRunner用ResultSetHandler的子類來處理ResultSet並返回結果;而包提供的ResultSetHandler子類使用RowProcessor的子類來處理ResultSet中的每一行;RowProcessor的預設實現為BasicRowProcessor;BeanProcessor不是RowProcessor,可以看作一個工具類

 

ResultHandler及其子類 -- 實現了Object handle(ResultSet rs) throws SQLException方法

AbstractListHandler -- 返回多行List的抽象類別

ArrayHandler --  返回一行的Object[]

ArrayListHandler -- 返回List,每行是Object[]

BeanHandler -- 返回第一個Bean對象

BeanListHandler -- 返回List,每行是Bean

ColumnListHandler -- 返回一列的List

KeyedHandler -- 返回Map,具體見代碼

MapHandler -- 返回單個Map

MapListHandler -- 返回List,每行是Map

ScalarHandler -- 返回列的頭一個值

代碼:

//建表語句<br />DROP TABLE IF EXISTS `test`.`user`;<br />CREATE TABLE `test`.`user` (<br /> `name` varchar(10) DEFAULT NULL,<br /> `password` varchar(10) DEFAULT NULL<br />) ENGINE=MyISAM DEFAULT CHARSET=latin1;<br />表中資料<br />'user1', 'pwd1'<br />'user2', 'pwd2'<br />//User類<br />public class User {<br />private String name;<br />private String pwd;<br />public User(){<br />}<br />public void setName(String val) {<br />this.name = val;<br />}<br />public void setPassword(String val) {<br />this.pwd = val;<br />}<br />public String getName() {<br />return name;<br />}<br />public String getPassword() {<br />return pwd;<br />}<br />}

package dbutiltest;<br />import java.sql.Connection;<br />import java.sql.DriverManager;<br />import java.sql.SQLException;<br />import java.util.List;<br />import java.util.Map;<br />import org.apache.commons.dbutils.DbUtils;<br />import org.apache.commons.dbutils.QueryRunner;<br />import org.apache.commons.dbutils.ResultSetHandler;<br />import org.apache.commons.dbutils.handlers.ArrayHandler;<br />import org.apache.commons.dbutils.handlers.ArrayListHandler;<br />import org.apache.commons.dbutils.handlers.BeanHandler;<br />import org.apache.commons.dbutils.handlers.BeanListHandler;<br />import org.apache.commons.dbutils.handlers.ColumnListHandler;<br />import org.apache.commons.dbutils.handlers.KeyedHandler;<br />import org.apache.commons.dbutils.handlers.MapListHandler;<br />public class TestDbUtils {</p><p>static {<br />try {<br />Class.forName("org.gjt.mm.mysql.Driver");<br />} catch (ClassNotFoundException e) {<br />e.printStackTrace();<br />System.exit(1);<br />}<br />}</p><p>public Connection getConnection() {<br />Connection conn = null;<br />try {<br />conn = DriverManager.getConnection(<br />"jdbc:mysql://localhost:3306/test", "root", "pwd");<br />} catch (SQLException e) {<br />e.printStackTrace();<br />}<br />return conn;<br />}</p><p>public static void main(String[] args) {<br />TestDbUtils u = new TestDbUtils();<br />u.testArrayHandler();<br />u.testArrayListHandler();<br />u.testBeanListHandler();<br />u.testMapListHandler();<br />u.testColumnListHandler();<br />u.testNonQuery();<br />}</p><p>public void testArrayHandler() {<br />System.out.println("----testArrayHandler----");<br />String sql = "select * from user";<br />ResultSetHandler handler = new ArrayHandler();<br />QueryRunner query = new QueryRunner();<br />Connection conn = null;<br />try {<br />conn = getConnection();<br />Object[] arr = (Object[])query.query(conn, sql, handler);<br />for (int i = 0; i < arr.length; i++) {<br />System.out.println(arr[i].toString());<br />}<br />} catch (SQLException e) {<br />e.printStackTrace();<br />} finally {<br />try {<br />DbUtils.close(conn);<br />} catch (SQLException e) {<br />// ignore<br />}<br />}</p><p>}</p><p>public void testArrayListHandler() {<br />System.out.println("----testArrayListHandler----");<br />String sql = "select * from user";<br />ResultSetHandler handler = new ArrayListHandler();<br />QueryRunner query = new QueryRunner();<br />Connection conn = null;<br />try {<br />conn = getConnection();<br />List list = (List)query.query(conn, sql, handler);<br />for (int i = 0; i < list.size(); i++) {<br />Object[] arr = (Object[])list.get(i);<br />for (int j = 0; j < arr.length; j++) {<br />System.out.print(arr[j] + " ");<br />}<br />System.out.println();<br />}<br />} catch (SQLException e) {<br />e.printStackTrace();<br />} finally {<br />try {<br />DbUtils.close(conn);<br />} catch (SQLException e) {<br />// ignore<br />}<br />}</p><p>}</p><p>public void testBeanListHandler() {<br />System.out.println("----testBeanListHandler----");<br />String sql = "select * from user where name=?";<br />Object[] params = new Object[]{"user1"};<br />ResultSetHandler handler = new BeanListHandler(User.class);<br />QueryRunner query = new QueryRunner();<br />Connection conn = null;<br />try {<br />conn = getConnection();<br />List list = (List)query.query(conn, sql, params, handler);<br />for (int i = 0; i < list.size(); i++) {<br />User user = (User)list.get(i);<br />System.out.println(user.getName() + " " + user.getPassword());<br />}<br />} catch (SQLException e) {<br />e.printStackTrace();<br />} finally {<br />try {<br />DbUtils.close(conn);<br />} catch (SQLException e) {<br />// ignore<br />}<br />}<br />}</p><p>public void testMapListHandler() {<br />System.out.println("----testMapListHandler----");<br />String sql = "select * from user where name=?";<br />Object[] params = new Object[]{"user1"};<br />ResultSetHandler handler = new MapListHandler();<br />QueryRunner query = new QueryRunner();<br />Connection conn = null;<br />try {<br />conn = getConnection();<br />List list = (List)query.query(conn, sql, params, handler);<br />for (int i = 0; i < list.size(); i++) {<br />Map user = (Map)list.get(i);<br />System.out.println(user.get("name") + " " + user.get("password"));<br />}<br />} catch (SQLException e) {<br />e.printStackTrace();<br />} finally {<br />try {<br />DbUtils.close(conn);<br />} catch (SQLException e) {<br />// ignore<br />}<br />}<br />}</p><p>public void testColumnListHandler() {<br />System.out.println("----testColumnListHandler----");<br />String sql = "select * from user";<br />ResultSetHandler handler = new ColumnListHandler("name");<br />QueryRunner query = new QueryRunner();<br />Connection conn = null;<br />try {<br />conn = getConnection();<br />List list = (List)query.query(conn, sql, handler);<br />for (int i = 0; i < list.size(); i++) {<br />System.out.println(list.get(i));<br />}<br />} catch (SQLException e) {<br />e.printStackTrace();<br />} finally {<br />try {<br />DbUtils.close(conn);<br />} catch (SQLException e) {<br />// ignore<br />}<br />}<br />}</p><p>public void testKeyedHandler() {<br />System.out.println("----testKeyedHandler----");<br />String sql = "select * from user";<br />ResultSetHandler handler = new KeyedHandler("name");<br />QueryRunner query = new QueryRunner();<br />Connection conn = null;<br />try {<br />conn = getConnection();<br />Map map = (Map)query.query(conn, sql, handler);<br />Map user = (Map)map.get("user2");<br />System.out.println(user.get("password"));<br />} catch (SQLException e) {<br />e.printStackTrace();<br />} finally {<br />try {<br />DbUtils.close(conn);<br />} catch (SQLException e) {<br />// ignore<br />}<br />}<br />}</p><p>public void testNonQuery() {<br />System.out.println("----testNonQuery----");<br />String sql = "insert into `user` values('user_test','pwd_test')";<br />QueryRunner query = new QueryRunner();<br />Connection conn = null;<br />try {<br />conn = getConnection();<br />query.update(conn, sql);<br />} catch (SQLException e) {<br />e.printStackTrace();<br />} finally {<br />try {<br />DbUtils.close(conn);<br />} catch (SQLException e) {<br />// ignore<br />}<br />}<br />}<br />}<br />

 

 

關於wrappers包:

在建立
QueryRunner時,覆蓋父類的方法wrap

QueryRunner query = new QueryRunner() {<br />protected ResultSet wrap(ResultSet rs) {<br />return StringTrimmedResultSet.wrap(rs);<br />}<br />};

 

四、擴充

1.RowProcessor介面

2.ResultSetHandler介面

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.