使用DbUtils實現增刪改查——ResultSetHandler 介面的實作類別,resultsethandler

來源:互聯網
上載者:User

使用DbUtils實現增刪改查——ResultSetHandler 介面的實作類別,resultsethandler

        在上一篇文章中《使用DbUtils實現增刪改查》,發現執行runner.query()這行代碼時,需要自己去處理查詢到的結果集,比較麻煩。這行代碼的原型是:

public Object query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

其中ResultSetHandler是一個介面,實際上,萬能的Apache已經為我們提供了眾多好用的實作類別,現在舉例如下:

public class RSHanlderDemo {//ScalarHandler:擷取結果集中第一行資料指定列的值,常用來進行單值查詢@Testpublic void tes9() throws SQLException{QueryRunner runner = new QueryRunner(new ComboPooledDataSource());Long count = (Long)runner.query("select count(*) from account",new ScalarHandler());System.out.println(count);}//KeyedHandler(name):將結果集中的每一行資料都封裝到一個Map裡(List<Map>),再把這些map再存到一個map裡,其key為指定的列。@Testpublic void tes8() throws SQLException{QueryRunner runner = new QueryRunner(new ComboPooledDataSource()); Map<Object, Map<String, Object>> map = runner.query("select * from account where money>?", new KeyedHandler("id"),500);System.out.println(map);}//ColumnListHandler:將結果集中某一列的資料存放到List中。@Testpublic void tes7() throws SQLException{QueryRunner runner = new QueryRunner(new ComboPooledDataSource());List<Object>list = runner.query("select * from account where money>?", new ColumnListHandler(3),500);System.out.println(list);}//MapListHandler:將結果集中的每一行資料都封裝到一個Map裡,然後再存放到List@Testpublic void tes6() throws SQLException{QueryRunner runner = new QueryRunner(new ComboPooledDataSource());List<Map<String, Object>> list = runner.query("select * from account where money>?", new MapListHandler(),500);System.out.println(list);}//MapHandler:將結果集中的第一行資料封裝到一個Map裡,key是列名,value就是對應的值。@Testpublic void tes5() throws SQLException{QueryRunner runner = new QueryRunner(new ComboPooledDataSource()); Map<String, Object> map = runner.query("select * from account where money>?", new MapHandler(),500);System.out.println(map);}//BeanListHandler:將結果集中的每一行資料都封裝到一個對應的JavaBean執行個體中,存放到List裡。@Testpublic void tes4() throws SQLException{QueryRunner runner = new QueryRunner(new ComboPooledDataSource());List<Account>list = runner.query("select * from account where money>?", new BeanListHandler<Account>(Account.class),500);System.out.println(list);}//BeanHandler:將結果集中的第一行資料封裝到一個對應的JavaBean執行個體中。@Testpublic void tes3() throws SQLException{QueryRunner runner = new QueryRunner(new ComboPooledDataSource());Account acc = runner.query("select * from account where money>?", new BeanHandler<Account>(Account.class),500);System.out.println(acc);}//ArrayListHandler:把結果集中的每一行資料都轉成一個對象數組,再存放到List中。@Testpublic void tes2() throws SQLException{QueryRunner runner = new QueryRunner(new ComboPooledDataSource());List<Object[]> list = runner.query("select * from account where money>?", new ArrayListHandler(),500);System.out.println(list);}//ArrayHandler:把結果集中的第一行資料轉成對象數組。@Testpublic void test1() throws SQLException{QueryRunner runner = new QueryRunner(new ComboPooledDataSource());Object[] objs = runner.query("select * from account where money>?", new ArrayHandler(),500);System.out.println(objs);}}

測試時,可以加斷點調試,再執行Debug as JUnit Test。

總結如下:

①ArrayHandler:把結果集中的第一行資料轉成對象數組。
②ArrayListHandler:把結果集中的每一行資料都轉成一個對象數組,再存放到List中。
BeanHandler:將結果集中的第一行資料封裝到一個對應的JavaBean執行個體中。
BeanListHandler:將結果集中的每一行資料都封裝到一個對應的JavaBean執行個體中,存放到List裡。
⑤MapHandler:將結果集中的第一行資料封裝到一個Map裡,key是列名,value就是對應的值。
⑥MapListHandler:將結果集中的每一行資料都封裝到一個Map裡,然後再存放到List
⑦ColumnListHandler:將結果集中某一列的資料存放到List中。
⑧KeyedHandler(name):將結果集中的每一行資料都封裝到一個Map裡(List<Map>),再把這些map再存到一個map裡,其key為指定的列。
⑨ScalarHandler:擷取結果集中第一行資料指定列的值,常用來進行單值查詢。


javalangClassNotFoundException: orgapachecommonsdbutilsResultSetHandler怎解決?

注意類名!!!
 
對於java 串連資料庫實現增刪改查的具體功可以代碼

首先你得確定你的資料庫連接是通過什麼形式串連的,hibernate還是原生態的jdbc 還是spring;
如果是只有hibernate,那麼你得通過載入設定檔得到sessionFactory,然後得到session
如果spring,那麼同樣也需要注入sessionfactory到你的dao
如果是jdbc方式,那麼你就按照原生態jdbc寫法
總之,在你構造DAO時,得有資料來源。這樣才能操縱你的資料庫
如果搞懂了這些問題,那麼你的第一個,第三個問題就迎刃而解了。至於第二問題,我沒明白你什麼意思!

 

相關文章

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.