DBUtils和連接池


  DBUtils   

 概述

DBUtils是java編程中的數據庫操作實用工具,小巧簡單實用。

DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少寫代碼。

Dbutils三個核心功能介紹

  QueryRunner中提供對sql語句操作的API.

  ResultSetHandler接口,用於定義select操作后,怎樣封裝結果集.

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

 QueryRunner核心類

  update(Connection conn, String sql, Object... params) ,用來完成表數據的增加、刪除、更新操作

  query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用來完成表數據的查詢操作

   QueryRunner實現添加、更新、刪除操作

  update(Connection conn, String sql, Object... params) ,用來完成表數據的增加、刪除、更新操作

    QueryRunner實現查詢操作

  query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params),用來完成表數據的查詢操作

1.1.1    ResultSetHandler結果集處理類

ArrayHandler

將結果集中的第一條記錄封裝到一個Object[]數組中,數組中的每一個元素就是這條記錄中的每一個字段的值

ArrayListHandler

將結果集中的每一條記錄都封裝到一個Object[]數組中,將這些數組在封裝到List集合中。

BeanHandler

將結果集中第一條記錄封裝到一個指定的javaBean中。

BeanListHandler

將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中

ColumnListHandler

將結果集中指定的列的字段值,封裝到一個List集合中

ScalarHandler

它是用於單數據。例如select count(*) from 表操作。

MapHandler

將結果集第一行封裝到Map集合中,Key 列名, Value 該列數據

MapListHandler

將結果集每一行封裝到Map集合中,Key 列名, Value 該列數據,Map集合存儲到List集合

   JavaBean

  1. 需要實現接口:java.io.Serializable 
  2. 提供私有字段:private 類型 字段名;
  3. 提供getter/setter方法:
  4. 提供無參構造

代碼實現:

 1 public void addProduct() throws SQLException{  2         Connection conn=JDBCUtils.getConn();  3         QueryRunner qr=new QueryRunner();  4         String sql="insert into product(pid,pname) values(?,?)";  5         Object[] obj={"1234567","iphoneXS"};  6  qr.update(conn, sql,obj);  7  DbUtils.closeQuietly(conn);  8  }  9     public void deleteProduct() throws SQLException{  10         Connection conn=JDBCUtils.getConn();  11         QueryRunner qr=new QueryRunner();  12         String sql="delete from product where pname=? ";  13         Object[] obj={"qwdqw"};  14  qr.update(conn,sql, obj);  15  DbUtils.closeQuietly(conn);  16  }  17     public void editProduct() throws SQLException{  18         Connection conn=JDBCUtils.getConn();  19         QueryRunner qr=new QueryRunner();  20         String sql="update product set pname=? where pid=?";  21         Object[] obj={"vivoX10","1234567"};  22  qr.update(conn, sql,obj);  23  DbUtils.closeQuietly(conn);  24  }  25     //ArrayHandler  26     //將結果集中的第一行數據封裝到Object[]中
 27     public void select1() throws SQLException{  28         Connection conn=JDBCUtils.getConn();  29         QueryRunner qr=new QueryRunner();  30         String sql="select * from product";  31         Object[] obj=qr.query(conn,sql, new ArrayHandler());  32         for(Object o:obj){  33  System.out.println(o);  34  }  35  }  36     //ArrayListHandler  37     //將結果集中的每一行都封裝到Object[]中,然后將每一個Object數組封裝到一個List集合中
 38     public void select2() throws SQLException{  39         Connection conn=JDBCUtils.getConn();  40         QueryRunner qr=new QueryRunner();  41         String sql="select * from product";  42         List<Object[]> list=qr.query(conn,sql, new ArrayListHandler());  43         for(Object[] obj:list){  44             for(Object o:obj){  45                 System.out.println(o+"\t");  46  }  47  System.out.println();  48  }  49  }  50     //BeanHandler  51     //將結果集中的第一條記錄封裝到指定的JavaBean中
 52     public void select3() throws SQLException{  53         QueryRunner qr=new QueryRunner();  54         Connection conn=JDBCUtils.getConn();  55         String sql="select * from product";  56         Product product=qr.query(conn,sql, new BeanHandler<Product>(Product.class));  57  System.out.println(product);  58  DbUtils.closeQuietly(conn);  59  }  60     //BeanListHandler  61         //將結果集中的每一條記錄封裝到指定的JavaBean中再將每一個JavaBean封裝到List集合中
 62         public void select4() throws SQLException{  63             QueryRunner qr=new QueryRunner();  64             Connection conn=JDBCUtils.getConn();  65             String sql="select * from product";  66             List<Product> list=qr.query(conn,sql, new BeanListHandler<Product>(Product.class));  67             for(Product p:list){  68  System.out.println(p);  69  }  70  DbUtils.closeQuietly(conn);  71  }  72         //ColumnListHandler  73         //將結果集中的指定列封裝到List集合中
 74         public void select5() throws SQLException{  75             QueryRunner qr=new QueryRunner();  76             Connection conn=JDBCUtils.getConn();  77             String sql="select * from product";  78             List<String> list=qr.query(conn,sql, new ColumnListHandler<String>("pname"));  79             for(String s:list){  80  System.out.println(s);  81  }  82  DbUtils.closeQuietly(conn);  83  }  84         //ScalarHandler
 85         public void select6() throws SQLException{  86             QueryRunner qr=new QueryRunner();  87             Connection conn=JDBCUtils.getConn();  88             String sql="select count(*) from product";  89             Long count=qr.query(conn,sql, new ScalarHandler<Long>());  90  System.out.println(count);  91  DbUtils.closeQuietly(conn);  92  }  93         
 94         public void select7() throws SQLException{  95             QueryRunner qr=new QueryRunner();  96             Connection conn=JDBCUtils.getConn();  97             String sql="select * from product";  98             Map<String,Object> map=qr.query(conn, sql, new MapHandler());  99             Set<Map.Entry<String,Object>> set=map.entrySet(); 100             for(Map.Entry<String,Object> entry:set){ 101                 System.out.println(entry.getKey()+"..."+entry.getValue()); 102  } 103  DbUtils.closeQuietly(conn); 104  } 105         public void select8() throws SQLException{ 106             QueryRunner qr=new QueryRunner(DBUtils.getDataSource()); 107             //Connection conn=JDBCUtils.getConn();
108             String sql="select * from product"; 109             List<Map<String,Object>> list=qr.query(sql, new MapListHandler()); 110             for(Map<String,Object> map:list){ 111                 Set<Map.Entry<String,Object>> set=map.entrySet(); 112                 for(Map.Entry<String,Object> entry:set){ 113                     System.out.println(entry.getKey()+"..."+entry.getValue()); 114  } 115  } 116             
117             //DbUtils.closeQuietly(conn);
118  } 119 }

   連接池

   連接池概述

  概念

用池來管理Connection,這樣可以重復使用Connection。有了池,所以我們就不用自己來創建Connection,而是通過池來獲取Connection對象。當使用完Connection后,調用Connection的close()方法也不會真的關閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection對象了

DBCP連接池

 

 1 public class JDBCUtils {  2 
 3 
 4     public static final String DRIVER = "com.mysql.jdbc.Driver";  5 
 6 
 7     public static final String URL = "jdbc:mysql://localhost:3306/daydb";  8 
 9 
10     public static final String USERNAME = "root"; 11 
12 
13     public static final String PASSWORD = "root"; 14 
15 
16     /*
17 
18 
19  * 創建連接池BasicDataSource 20 
21 
22      */
23 
24 
25     public static BasicDataSource dataSource = new BasicDataSource(); 26 
27 
28     //靜態代碼塊
29 
30 
31     static { 32 
33 
34         //對連接池對象 進行基本的配置
35 
36 
37         dataSource.setDriverClassName(DRIVER); // 這是要連接的數據庫的驅動
38 
39 
40         dataSource.setUrl(URL); //指定要連接的數據庫地址
41 
42 
43         dataSource.setUsername(USERNAME); //指定要連接數據的用戶名
44 
45 
46         dataSource.setPassword(PASSWORD); //指定要連接數據的密碼
47 
48 
49  } 50 
51 
52     /*
53 
54 
55  * 返回連接池對象 56 
57 
58      */
59 
60 
61     public static DataSource getDataSource(){ 62 
63 
64         return dataSource; 65 
66 
67  } 68 
69 
70 }

 

 

  工具類的使用

 

 1  測試類  2 
 3 
 4 /*
 5 
 6 
 7  * 演示使用DBUtils工具 完成數據庫表的增加操作  8 
 9 
 10  */
 11 
 12 
 13 public class Demo {  14 
 15 
 16     // 插入功能
 17 
 18 
 19  @Test  20 
 21 
 22     public void insert(){  23 
 24 
 25         try {  26 
 27 
 28             //獲取一個用來執行SQL語句的對象 QueryRunner
 29 
 30 
 31             QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());  32 
 33 
 34 String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)";  35 
 36 
 37             Object[] params = {"股票收入", 5500, "收入"};  38 
 39 
 40              int line = qr.update(sql,params);  41 
 42 
 43             //結果集處理
 44 
 45 
 46             System.out.println("line = " + line);  47 
 48 
 49            
 50 
 51 
 52         } catch (SQLException e) {  53 
 54 
 55             throw new RuntimeException(e);  56 
 57 
 58  }  59 
 60 
 61  }  62 
 63 
 64    
 65 
 66 
 67     //刪除功能
 68 
 69 
 70  @Test  71 
 72 
 73     public void delete(){  74 
 75 
 76         try {  77 
 78 
 79             //創建一個QueryRunner對象,用來完成SQL語句的執行
 80 
 81 
 82             QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());  83 
 84 
 85             //執行SQL語句
 86 
 87 
 88             String sql = "DELETE FROM zhangwu WHERE name = ?";  89 
 90 
 91             Object[] params = {"股票收入"};  92 
 93 
 94             int line = qr.update(sql, params);  95 
 96 
 97             //結果集的處理
 98 
 99 
100             System.out.println("line="+line); 101 
102 
103            
104 
105 
106         } catch (SQLException e) { 107 
108 
109             throw new RuntimeException(e); 110 
111 
112  } 113 
114 
115  } 116 
117 
118    
119 
120 
121     //更新功能
122 
123 
124  @Test 125 
126 
127     public void update(){ 128 
129 
130         try { 131 
132 
133             //創建一個QueryRunner對象,用來完成SQL語句的執行
134 
135 
136             QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 137 
138 
139             //執行SQL語句
140 
141 
142             String sql = "UPDATE zhangwu SET money = money+1000 WHERE name=?"; 143 
144 
145             Object[] params = {"股票收入"}; 146 
147 
148             int line = qr.update(sql, params); 149 
150 
151             //結果集的處理
152 
153 
154             System.out.println("line="+line); 155 
156 
157            
158 
159 
160         } catch (SQLException e) { 161 
162 
163             throw new RuntimeException(e); 164 
165 
166  } 167 
168 
169  } 170 
171 
172    
173 
174 
175     //查詢功能,將結果集中第一條記錄封裝到一個指定的javaBean中。
176 
177 
178  @Test 179 
180 
181     public void search(){ 182 
183 
184         try{ 185 
186 
187             //獲取QueryRunner
188 
189 
190             QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 191 
192 
193             //執行SQL語句
194 
195 
196             String sql = "SELECT * FROM zhangwu"; 197 
198 
199             Object[] params = {}; 200 
201 
202             Product p = qr.query(sql, new BeanHandler<Product>(Product.class), params); 203 
204 
205             //結果集處理
206 
207 
208  System.out.println(p); 209 
210 
211            
212 
213 
214         } catch(SQLException e){ 215 
216 
217             throw new RuntimeException(e); 218 
219 
220  } 221 
222 
223  } 224 
225 
226 }

 

 

 

 

    常見配置項

 

分類

屬性

描述

必須項

driverClassName

數據庫驅動名稱

url

數據庫的地址

username

用戶名

password

密碼

基本項(擴展)

maxActive

最大連接數量

minIdle

最小空閑連接

maxIdle

最大空閑連接

initialSize

初始化連接

 


  總結

 

  DBUtils工具

 

 作用:簡化JDBC的操作

 

  常用類與方法

 

  QueryRunner 用來執行SQL語句對象

 

  update(Connection conn, String sql, Object… params) 插入表記錄、更新表記錄、刪除表記錄

 

  query(Connection conn, String sql, ResultSetHandler handler, Object… params) 查詢表記錄

 

  ResultSetHandler 處理結果集的對象

 

ArrayHandler

將結果集中的第一條記錄封裝到一個Object[]數組中,數組中的每一個元素就是這條記錄中的每一個字段的值

ArrayListHandler

將結果集中的每一條記錄都封裝到一個Object[]數組中,將這些數組在封裝到List集合中。

BeanHandler

將結果集中第一條記錄封裝到一個指定的javaBean中。

BeanListHandler

將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中

ColumnListHandler

將結果集中指定的列的字段值,封裝到一個List集合中

ScalarHandler

它是用於單數據。例如select count(*) from 表操作。

MapHandler

將結果集第一行封裝到Map集合中,Key 列名, Value 該列數據

MapListHandler

將結果集第一行封裝到Map集合中,Key 列名, Value 該列數據,Map集合存儲到List集合

 

 

 

 

 

  DBCP連接池

 

  作用:自身維護了多個Connection連接對象維護

 

  BasicDataSource類  是  DataSource接口的實現類

 

  DataSource接口,它是java與每種數據庫連接池 連接的規范標准

 

  DBCP連接池常見的配置

 

必須項

driverClassName

數據庫驅動名稱

url

數據庫的地址

username

用戶名

password

密碼

基本項

maxActive

最大連接數量

initialSize

連接池中初始化多少個Connection連接對象

擴展項

maxWait

超時等待時間以毫秒為單位 1000等於1秒

 

 

 


免責聲明!

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



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