DBUtils框架簡析

DBUtils(DataSourceUtils提供數據源)
DBUtils是apache組織的一個工具類,jdbc的框架,更方便我們使用

使用步驟:

  1.導入jar包(commons-dbutils-1.4.jar,c3p0-0.9.1.2.jar)

  1.1導入DataSourceUtils類(如何導入並配置)

  2.創建一個queryrunner類

    queryrunner作用:操作sql語句
構造方法:
new QueryRunner(Datasource ds);//ds爲一個數據源 eg:DataSourceUtils.getDataSource();
3.編寫sql

  4.執行sql

    uery(..):執行r操作
update(…):執行cud操作


(1)導入步驟:(我使用的數據庫是MySQL)
一.導入jar包(c3p0-0.9.1.2.jar)
c3p0-0.9.1.2.jar
commons-dbutils-1.4.jar
mysql-connector-java-5.0.8-bin.jar

(2).其實只是使用的話,只看兩個類(DbUtils 和QueryRunner)和一個接口(ResultSethandler)就可以了。

1,DbUtils
DbUtils是一個爲做一些諸如關閉連接、裝載JDBC驅動程序之類的常規工作提供有用方法的類,它裏面所有的方法都是靜態的。
這個類裏的重要方法有:
close():
DbUtils類提供了三個重載的關閉方法。這些方法檢查所提供的參數是不是NULL,
如果不是的話,它們就關閉連接、聲明和結果集(ResultSet)。
CloseQuietly:
CloseQuietly這一方法不僅能在連接、聲明或者結果集(ResultSet)爲NULL情況下避免關閉,
還能隱藏一些在程序中拋出的SQLEeception。如果你不想捕捉這些異常的話,這對你是非常有用的。
在重載CloseQuietly方法時,特別有用的一個方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),
這是因爲在大多數情況下,連接、聲明和結果集(ResultSet)是你要用的三樣東西,而且在最後的塊你必須關閉它們。
使用這一方法,你最後的塊就可以只需要調用這一方法即可。
CommitAndCloseQuietly(Connection conn):
這一方法用來提交連接,然後關閉連接,並且在關閉連接時不向上拋出在關閉時發生的一些SQL異常。
LoadDriver(String driveClassName):這一方法裝載並註冊JDBC驅動程序,如果成功就返回TRUE。
使用這種方法,你不需要去捕捉這個異常ClassNotFoundException。使用loadDrive方法,編碼就變得更容易理解,
你也就得到了一個很好的Boolean返回值,這個返回值會告訴你驅動類是不是已經加載成功了。
2,ResultSetHandler
這一接口執行處理一個jaca.sql.ResultSet,將數據轉變並處理爲任何一種形式,這樣有益於其應用而且使用起來更容易。
這一組件提供了ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, MapHandler, MapListHandler, and ScalarHandler等執行程序。

ResultSetHandler接口提供了一個單獨的方法:Object handle (java.sql.ResultSet .rs)。
因此任何ResultSetHandler 的執行需要一個結果集(ResultSet)作爲參數傳入,然後才能處理這個結果集,再返回一個對象。
因爲返回類型是java.lang.Object,所以除了不能返回一個原始的Java類型之外,其它的返回類型並沒有什麼限制。
如果你發現這七個執行程序中沒有任何一個提供了你想要的服務,你可以自己寫執行程序並使用它。

3,QreryRunner
這個類使執行SQL查詢簡單化了,它與ResultSetHandler串聯在一起有效地履行着一些平常的任務,它能夠大大減少你所要寫的編碼。
QueryRunner類提供了兩個構造器:其中一個是一個空構造器,另一個則拿一個 javax.sql.DataSource 來作爲參數。
因此,在你不用爲一個方法提供一個數據庫連接來作爲參數的情況下,提供給構造器的數據源(DataSource) 被用來獲得一個新的連接並將繼續進行下去。

這一類中的重要方法包括以下這些:
query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):
這一方法執行一個選擇查詢,在這個查詢中,對象陣列的值被用來作爲查詢的置換參數。
這一方法內在地處理PreparedStatement 和ResultSet 的創建和關閉。
ResultSetHandler對把從 ResultSet得來的數據轉變成一個更容易的或是應用程序特定的格式來使用。
query(String sql, Object[] params, ResultSetHandler rsh):
這幾乎與第一種方法一樣;唯一的不同在於它不將數據庫連接提供給方法,
並且它是從提供給構造器的數據源(DataSource) 或使用的setDAtaSource 方法中重新獲得的。
query(Connection conn, String sql, ResultSetHandler rsh):
這執行一個不要參數的選擇查詢。
update(Connection conn, String sql, Object[] params):
這一方法被用來執行一個插入、更新或刪除操作。對象陣列爲聲明保存着置換參數。

到此爲止,說明工作就差不多了,下面就實戰一下,進入DBUtils使用詳解二。

一,使用遵從以下步驟:

1.加載JDBC驅動程序類,並用DriverManager來得到一個數據庫連接conn。
2.實例化 QueryRunner,得到實例化對象qRunner。
3. qRunner.update()方法,執行增改刪的sql命令,
qRunner.query()方法,得到結果集。

二,實戰
1,連接類ConnectDb:import java.sql.DriverManager;

import java.sql.SQLException;  
import java.sql.Connection;   

public class ConnectDb {  
    private static String driveClassName = "com.mysql.jdbc.Driver";  
    private static String url = "jdbc:mysql://192.168.1.161:3306/test?useUnicode=true&characterEncoding=utf8";   

    private static String user = "root";  
    private static String password = "e-playnow";  

    public static Connection Connect(){  
        Connection conn = null;  

        //load driver  
        try {  
            Class.forName(driveClassName);  
        } catch (ClassNotFoundException  e) {  
            System.out.println("load driver failed!");  
            e.printStackTrace();  
        }  

        //connect db  
        try {  
            conn = DriverManager.getConnection(url, user, password);  
        } catch (SQLException e) {  
            System.out.println("connect failed!");  
            e.printStackTrace();  
        }         

        return conn;  
    }  
}  

數據庫表:

CREATE TABLE `user` (  
  `id` int(11) NOT NULL auto_increment,  
  `name` varchar(50) NOT NULL,  
  `age` tinyint(10) NOT NULL,  
  PRIMARY KEY  (`id`)  
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8  

Bean:

package Beans;  

public class UserBean {  
    private int id;   
    private String name;   
    private int age;  

    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getAge() {  
        return age;  
    }  
    public void setAge(int age) {  
        this.age = age;  
    }  
}  

2,Demo:

import java.sql.Connection;  
import java.sql.SQLException;  
import java.util.List;  
import org.apache.commons.dbutils.DbUtils;  
import org.apache.commons.dbutils.QueryRunner;  
import org.apache.commons.dbutils.handlers.BeanListHandler;  
import Beans.UserBean;  

public class main {  

    public static void main(String[] args) throws SQLException {  
        insert_test();  
        del_test();  
    }  

    static void insert_test() throws SQLException{  
        Connection conn = ConnectDb.Connect();  

        //創建SQL執行工具   
        QueryRunner qRunner = new QueryRunner();   

        //執行SQL插入   
        int n = qRunner.update(conn, "insert into user(name,age) values('xxx',22)");   
        System.out.println("成功插入" + n + "條數據!");   

        //關閉數據庫連接   
        DbUtils.closeQuietly(conn);       
    }   

    static void select_test() throws SQLException{  
        Connection conn = ConnectDb.Connect();  

        //創建SQL執行工具   
        QueryRunner qRunner = new QueryRunner();   

        @SuppressWarnings("unchecked")  
        List<UserBean> list = (List<UserBean>) qRunner.query(conn, "select id,name,age from user", new BeanListHandler(UserBean.class));   
        //輸出查詢結果   
        for (UserBean user : list) {   
                System.out.println(user.getAge());   
        }   

        //關閉數據庫連接   
        DbUtils.closeQuietly(conn);   
    }   

    static void update_test() throws SQLException{  
        Connection conn = ConnectDb.Connect();  

        //創建SQL執行工具   
        QueryRunner qRunner = new QueryRunner();   
        //執行SQL插入   
        int n = qRunner.update(conn, "update user set name = 'xxx',age=28");   
        System.out.println("成功更新" + n + "條數據!");   

        //關閉數據庫連接   
        DbUtils.closeQuietly(conn);   
    }   

    static void del_test() throws SQLException{  
        Connection conn = ConnectDb.Connect();  

        //創建SQL執行工具   
        QueryRunner qRunner = new QueryRunner();   
        //執行SQL插入   
        int n = qRunner.update(conn, "DELETE from user WHERE name='xxx';");   
        System.out.println("刪除成功" + n + "條數據!");   

        //關閉數據庫連接   
        DbUtils.closeQuietly(conn);   
    }   
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章