java連接池和DBUtils工具處理器的講解

1.爲什麼要使用java連接池?

在我們用傳統的JDBC 連接數據庫,必須經常進行創建和銷燬,並且銷燬對象也不是很徹底,所以爲了節省時間、效率,可以使用連接池。

2.如何使用連接池?

在程序開始的時候,可以創建幾個連接,將連接放入到連接池中.用戶使用連接的時候,可以從連接池中進行獲取.用完之後,可以將連接歸還連接池。

常見連接池的有C3PO,DBCP,當然我們也可以自己定義——以下爲所寫代碼:

public class MyDataSource implements DataSource{

    // 創建一個List集合用於存放多個連接對象.

    privateList<Connection> list = new ArrayList<Connection>();

    // 在程序開始的時候,初始化幾個連接,將連接存放到list.

    publicMyDataSource() {

        // 初始化3個連接:

        for(inti=1;i<=3;i++){

            Connectionconn = JDBCUtils.getConnection();

            list.add(conn);

        }

    }

   

    @Override

    // 獲得連接的方法:

    publicConnection getConnection() throws SQLException {

        if(list.size()<= 0){

            for(inti=1;i<=3;i++){

                Connectionconn = JDBCUtils.getConnection();

                list.add(conn);

            }  

        }

        Connectionconn = list.remove(0);

        returnconn;

    }

    // 歸還連接的方法:

    publicvoid addBack(Connection conn){

        list.add(conn);

    }

...

}

3.什麼是DBUtils?

我們知道在執行select語句之後得到的是ResultSet,然後我們還需要對ResultSet進行轉換,得到最終我們想要的數據。你可以希望把ResultSet的數據放到一個List中,也可能想把數據放到一個Map中,或是一個Bean中。

DBUtils提供了一個接口ResultSetHandler,它就是用來ResultSet轉換成目標類型的工具。你可以自己去實現這個接口,把ResultSet轉換成你想要的類型。

DBUtils提供了很多個ResultSetHandler接口的實現,這些實現已經基本夠用了,我們通常不用自己去實現ResultSet接口了。

MapHandler:單行處理器!把結果集轉換成Map<String,Object>,其中列名爲鍵!
MapListHandler:多行處理器!把結果集轉換成List<Map<String,Object>>;
BeanHandler:單行處理器!把結果集轉換成Bean,該處理器需要Class參數,即Bean的類型;
BeanListHandler:多行處理器!把結果集轉換成List<Bean>;
ColumnListHandler:多行單列處理器!把結果集轉換成List<Object>,使用ColumnListHandler時需要指定某一列的名稱或編號,例如:newColumListHandler(“name”)表示把name列的數據放到List中。
ScalarHandler:單行單列處理器!把結果集轉換成Object。一般用於聚集查詢,例如select count(*) fromtab_student。

MapListHandler處理器


Bean處理器


Column處理器


4.QueryRunner查詢方式?

QueryRunner的查詢方法是:

public <T> Tquery(String sql, ResultSetHandler<T> rh, Object… params)

public <T> Tquery(Connection con, String sql, ResultSetHandler<T> rh, Object… params)

query()方法會通過sql語句和params查詢出ResultSet,然後通過rh把ResultSet轉換成對應的類型再返回。

java代碼:

@Test

    public void fun2() throws SQLException {

        DataSource ds = JdbcUtils.getDataSource();

        QueryRunner qr = new QueryRunner(ds);

        String sql = "select * from tab_student";

        List<Map<String,Object>>list = qr.query(sql, new MapListHandler()[ThinkPad1] );

        for(Map<String,Object> map : list) {

            System.out.println(map);

        }

    }

@Test

    public void fun3() throws SQLException {

        DataSource ds = JdbcUtils.getDataSource();

        QueryRunner qr = new QueryRunner(ds);

        String sql = "select * from tab_student wherenumber=?";

        Student stu = qr.query(sql, new BeanHandler<Student>(Student.class)[ThinkPad1] , "S_2000");

        System.out.println(stu);

    }

希望能對您有所幫助!!!





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章