DBUtil的使用


一、DBUtil介紹

  DBUtil是什么及作用

    DBUtil是Apache提供的一個開源的JDBC工具類庫,是java編程中數據庫操作實用工具,小巧簡單。

    DBUtil封裝了對JDBC的操作,簡化了JDBC操作,可以讓我們少些代碼。

    1.對數據表的讀操作

      可以將結果轉換成List、Array、Set等集合。

    2.對數據表的寫操作

      只需要寫SQL語句

    3.可以使用數據源,使用JNDI,數據庫連接池等技術來優化程序性能。

  

二、DBUtil的三個核心對象

  QueryRunner類

      QueryRunner中提供對sql語句的操作,主要有三個方法:

        1.query()用於執行select操作

        2.update()用於執行更新操作(insert、update、delete)

        3.batch()批處理

  ResultSetHandler接口

      定義了執行select操作后如何封裝結果集

  DBUtils類

      是一個工具類,定義了關閉資源和事務處理的方法

1.QueryRunner類

 構造函數:

  QueryRunner有四個構造函數,這里主要講兩個

  1)QueryRunner qr = new QueryRunner();

    這個構造函數沒有參數,可以用於需要手動控制事務,在使用該對象調用方法時(query,update,batch),需要傳入Connection對象

  2) QueryRunner qr = new QueryRunner(DataSource ds);

    這個構造函數可以傳入一個數據源參數,它的事務是自動控制的(一個sql一個事務),在使用該對象調用方法時,不用再傳入Connection對象。

方法:query(),update(),batch()

   下面寫幾個例子:

   1)建數據表(這里我就用自己原有的數據表了)

    

   2)創建項目導入jar包

    

   3)代碼示例

 

 1 public class TestQueryRunner {
 2     
 3 //    insert操作
 4     @Test
 5     public void testInsert() throws SQLException {
 6 //        創建QueryRunner對象
 7         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 8         qr.update("insert into user(username,password,email,birthday) values(?,?,?,?)",
 9                 "xiaoming","123456","xiaoming@163.com",new Date());
10     }
11     
12 //    update操作
13     @Test
14     public void testUpdate() throws SQLException {
15         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
16         qr.update("update user set password = ? where username = ?","123123","xiaoming");
17         
18     }
19     
20 //    delete操作
21     @Test
22     public void testDelete() throws SQLException {
23         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
24         qr.update("delete from user where id = ?",9);
25     }
26     
27 //    select操作
28     @Test
29     public void testSelect() throws SQLException {
30         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
31         User user = qr.query("select * from user where username = ?", 
32                 new BeanHandler<User>(User.class),"xiaoming");
33         System.out.println(user);
34     }
35     
36 //    batch操作(執行相同的sql語句)
37     @Test
38     public void testBatch() throws SQLException {
39         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
40 //        傳入一個二維數組,高維是需要執行的sql語句的次數,低維為需要給sql語句中?賦的值
41         Object[][] params = new Object[10][];
42         for (int i = 0; i < params.length; i++) {
43             params[i] = new Object[] {"xiaoming","123456","xiaoming@163.com",new Date()};
44         }
45         qr.batch("insert into user(username,password,email,birthday) values(?,?,?,?)",params );
46     }
47 }

 

2.ResultSetHandler接口下的9個結果處理

1.ArrayHandler:取一條記錄,將該記錄中的每列值封裝到object[]數組中

 1 public class TestResultSetHandler {
 2 //    ArrayHandler:取1條記錄,把該條記錄的每列值封裝到一個Object[]數組中(如果沒有指定取哪一條,默認取表中第一條)
 3     @Test
 4     public void testArrayHandler() throws SQLException {
 5         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 6         Object[] objects = qr.query("select * from user where username = ?", 
 7                 new ArrayHandler(),"xiaoming");
 8         for (Object object : objects) {
 9             System.out.println(object);
10         }
11     }
12 }

輸出結果:

10
xiaoming
123123
xiaoming@163.com
2018-11-22 15:14:25

2.ArrayListHandler:取多條記錄,把每條記錄的每列值封裝到一個Object[]數組中,再將object[]放入List中

 1 //    ArrayListHandler:取多條記錄,把每條記錄的每列值封裝到一個Object[]數組中,再將object[]放入List中
 2     @Test
 3     public void testArrayListHandler() throws SQLException {
 4         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 5         List<Object[]> list = qr.query("select * from user", new ArrayListHandler());
 6         for (Object[] objects : list) {
 7             for (Object object : objects) {
 8                 System.out.println(object);
 9             }
10             System.out.println("------------------------");
11         }
12     }

輸出結果:

2
jeery
123456
xm@163.com
2018-10-07 13:56:37
------------------------
3
tom
123456
xm@163.com
2018-10-07
------------------------
4
??OHUA
123
xm@163.com
2018-12-01

 3.columnListHandler:取某一列的值,封裝到List中

1 //    columnListHandler:取某一列的值,封裝到List中
2     @Test
3     public void testColumnListHandler() throws SQLException {
4         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
5         List<Object> list = qr.query("select * from user", new ColumnListHandler(2));//2,指sql語句中查詢出來的列中的第二列
6         for (Object object : list) {
7             System.out.println(object);
8         }
9     }

輸出結果:

jeery
tom
??OHUA

4.keyedHandler:取多條記錄,每一條記錄封裝到一個map中,再將這個map封裝到另一個map中,key為指定的字段值。

 1 //    4.keyedHandler:取多條記錄,每一條記錄封裝到一個map中,再將這個map封裝到另一個map中,key為指定的字段值。
 2     @Test
 3     public void testKeyedHandler() throws SQLException {
 4         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 5         Map<Object, Map<String, Object>> map = qr.query("select * from user", new KeyedHandler(1));//以第一列id的值為大map的key值
 6         for (Map.Entry<Object, Map<String, Object>> bm : map.entrySet()) {
 7             for (Map.Entry<String, Object> mm : bm.getValue().entrySet()) {
 8                 System.out.println(mm.getKey()+"        "+mm.getValue());
 9             }
10             System.out.println("---------------------------");
11         }
12     }

輸出結果:

birthday        2018-10-07 13:56:37
password     123456
id        2
email      xm@163.com
username    jeery
---------------------------
birthday 2018-10-07
password 123456
id 3
email xm@163.com
username tom
---------------------------
birthday 2018-12-01
password 123
id 4
email xm@163.com
username ??OHUA
---------------------------

5.mapHandler:取一條記錄,將記錄的列名和列值放到一個map中

 1 //    mapHandler:取一條記錄,將記錄的列名和列值放到一個map中
 2     @Test
 3     public void testMapHandler() throws SQLException {
 4         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 5         Map<String, Object> map = qr.query("select * from user", new MapHandler());
 6         for (Map.Entry<String, Object> m : map.entrySet()) {
 7             System.out.println(m.getKey()+"\t"+m.getValue());
 8         }
 9         
10     }

輸出結果:

birthday 2018-10-07 13:56:37
password 123456
id 2
email xm@163.com
username jeery

6.MapListHandler:取多條記錄,把每條記錄封裝到map中,再將map封裝到List中

 1 //    MapListHandler:取多條記錄,把每條記錄封裝到map中,再將map封裝到List中
 2     @Test
 3     public void testMapListHandler() throws SQLException {
 4         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 5         List<Map<String,Object>> list = qr.query("select * from user", new MapListHandler());
 6         for (Map<String, Object> map : list) {
 7             for (Map.Entry<String, Object> m : map.entrySet()) {
 8                 System.out.println(m.getKey()+"\t"+m.getValue());
 9             }
10             System.out.println("------------------------------");
11         }
12     }

輸出結果:

birthday 2018-10-07 13:56:37
password 123456
id 2
email xm@163.com
username jeery
------------------------------
birthday 2018-10-07
password 123456
id 3
email xm@163.com
username tom
------------------------------
birthday 2018-12-01
password 123
id 4
email xm@163.com
username ??OHUA
------------------------------

7.ScalarHandler:取單行單列數據(一個單元格)

1 //    ScalarHandler:取單行單列數據(一個單元格)
2     @Test
3     public void testScalarHandler() throws SQLException {
4         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
5         Object count = qr.query("select count(*) from user", new ScalarHandler(1));
6         System.out.println(count);
7     }

輸出結果:8

 

8.BeanHandler:取一條數據

1 //    BeanHandler:取一條數據
2     @Test
3     public void testBeanHandler() throws SQLException {
4         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
5         User user = qr.query("select * from user", new BeanHandler<User>(User.class));
6         System.out.println(user);
7     }

輸出結果:

User [id=2, username=jeery, password=123456, email=xm@163.com, birthday=2018-10-07 13:56:37]

 

9.BeanListHandler:取多條數據

1 //    BeanHandler:取一條數據
2     @Test
3     public void testBeanListHandler() throws SQLException {
4         QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
5         List<User> list = qr.query("select * from user", new BeanListHandler<User>(User.class));
6         for (User user : list) {
7             System.out.println(user);
8         }
9     }

輸出結果:

User [id=2, username=jeery, password=123456, email=xm@163.com, birthday=2018-10-07 13:56:37]
User [id=3, username=tom, password=123456, email=xm@163.com, birthday=2018-10-07]
User [id=4, username=??OHUA, password=123, email=xm@163.com, birthday=2018-12-01]
User [id=5, username=??, password=123456, email=xm@163.com, birthday=2018-10-07 16:18:50]
User [id=6, username=??, password=123456, email=xm@163.com, birthday=2018-10-07 16:19:29]
User [id=7, username=125, password=12345, email=xm@163.com, birthday=2018-12-01]
User [id=8, username=142, password=321, email=xm@163.com, birthday=2018-12-01]
User [id=10, username=xiaoming, password=123123, email=xiaoming@163.com, birthday=2018-11-22 15:14:25]

3.DBUtils類

DBUtils中定義的一些方法

static void        

close(Connection conn)

static void        

close(ResultSet rs)

static void        

close(Statement stmt)

static void        

closeQuietly(Connection conn, Statement stmt, ResultSet rs)

static void        

rollback(Connection conn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM