一、DBUtils是什么?
DBUtils是一個對JDBC進行簡單封裝的開源工具類別庫,
二、其優點是什么?
對JDBC進行了簡單封裝,使用方便,提高開發效率,
三、DBUtils快速入門:
準備作業:
1、專案匯入c3p0,DBUtils,mysql連接驅動的jar包,并配置c3p0,ps:不會配置c3p0的童鞋可以看這里:了解與學習c3p0,
2、新建表:
1 create table user( 2 uid int, 3 uname varchar(55), 4 upassword varchar(55) 5 );
3、在你的類中新建一個QueryRunnerl類的成員變數用于方便測驗:
比如我的是這樣子的:
1 package test; 2 3 import org.apache.commons.dbutils.QueryRunner; 4 5 public class Main { 6 public static QueryRunner qr = new QueryRunner(C3p0.getDataSource()); //傳遞c3p0連接池物件 7 }
四、使用DBUtils執行DML(增、刪、改)操作:
1、添加資料:
1 public static void insert() throws SQLException { 2 String sql = "insert into user values(?,?,?)"; 3 int row = qr.update(sql,1001,"張三"); 4 if(row>0) { 5 System.out.println("執行操作成功!"); 6 }else { 7 System.out.println("執行操作失敗!!!"); 8 } 9 }
查看控制臺輸出:
查看user表:

代碼分析:主要使用到了QueryRunner中的update方法,第一個引數傳遞的是sql陳述句,第二個與其后的引數對應的是sql中的?占位符,
update回傳的引數型別為int型,若回傳的引數>0則表示操作成功,
另一種寫法:
1 public static void insert() throws SQLException { 2 String sql = "insert into user values(?,?,?)"; 3 Object[] paramsArr = {1002,"李四","qwer1122"}; 4 int row = qr.update(sql,paramsArr); 5 if(row>0) { 6 System.out.println("執行操作成功!"); 7 }else { 8 System.out.println("執行操作失敗!!!"); 9 } 10 }
查看控制臺輸出: 
查看user表:

代碼分析:
與第一種寫法不同的是,update傳遞的的引數sql后面的引數變為一個型別為Object的物件陣列,這個物件陣列封裝了要傳遞的引數,
你認為哪種方式更好呢?
2、洗掉資料:
1 public static void delete() throws SQLException { 2 String sql = "delete from user where uname = ?"; 3 int row = qr.update(sql,"張三"); 4 if(row>0) { 5 System.out.println("執行操作成功!"); 6 }else { 7 System.out.println("執行操作失敗!!!"); 8 } 9 }
查看控制臺輸出:

查看user表:

代碼分析:看了添加資料的操作,這里估計也能看懂了吧?滑稽.jpg
3、修改資料:
1 public static void update() throws SQLException { 2 String sql = "update user set uname=? where uid = ?"; 3 int row = qr.update(sql,"小天琪",1002); 4 if(row>0) { 5 System.out.println("執行操作成功!"); 6 }else { 7 System.out.println("執行操作失敗!!!"); 8 } 9 }
直接查看user表:

代碼分析:你懂的~~狗頭.jpg保命,
五、使用DBUtils進行DQL(查詢操作) 重點:
先向user表中添加幾行資料:
1 insert into user values(1003,"王二","ew123"); 2 insert into user values(1004,"麻子","aab111"); 3 insert into user values(1005,"狗子","aac122");
查看一波user表:

1、第一種處理方式使用ArrayHandler(回傳查詢結果的第一行資料):
1 public static void dqlUseArrayHandler() throws SQLException { //查詢結果為一個物件陣列,存的是查詢結果的第一行 2 String sql = "select * from user"; 3 Object[] resultsArr = qr.query(sql,new ArrayHandler()); 4 for(Object obj : resultsArr) { //遍歷結果陣列 5 System.out.print(obj+" "); 6 } 7 }
控制臺輸出:

2、第二種處理方式使用ArrayListHandler(回傳一個存有物件陣列的集合,物件陣列存的是每行資料):
1 public static void dqlUseArrayListHandler() throws SQLException{ //查詢結果為一個List集合,存的是物件陣列,而物件陣列存的是查詢到的每行資料 2 String sql = "select * from user"; 3 List<Object[]> resultsArr = qr.query(sql,new ArrayListHandler()); 4 for(Object[] objArr : resultsArr) { //遍歷結果 5 for(Object obj : objArr) { 6 System.out.print(obj+" "); 7 } 8 System.out.println(); 9 } 10 }
查看控制臺輸出:

3、使用BeanHandler(回傳查詢到的第一行資料封裝為一個javaBean):
先創建一個javaBean,名稱為:User.java,欄位名與user表的欄位一致,
我這里建的為:
1 package test; 2 3 public class User { 4 private int uid; 5 private String uname; 6 private String upassword; 7 public User() {} 8 public int getUid() { 9 return uid; 10 } 11 public void setUid(int uid) { 12 this.uid = uid; 13 } 14 public String getUname() { 15 return uname; 16 } 17 public void setUname(String uname) { 18 this.uname = uname; 19 } 20 public String getUpassword() { 21 return upassword; 22 } 23 public void setUpassword(String upassword) { 24 this.upassword = upassword; 25 } 26 @Override 27 public String toString() { 28 return "User [uid=" + uid + ", uname=" + uname + ", upassword=" + upassword + "]"; 29 } 30 31 }
ps:javaBean其實就是一個類,與普通類相比具有的特征:
- 提供一個默認的無參建構式,
- 需要被序列化并且實作了 Serializable 介面,
- 可能有一系列可讀寫屬性,
- 可能有一系列的 getter 或 setter 方法,
使用BeanHandler的查詢處理方式:
1 public static void dqlUseBeanHandler() throws SQLException { //將查詢結果的第一行資料封裝為javaBean 2 String sql = "select * from user"; 3 User user = qr.query(sql,new BeanHandler<User>(User.class)); 4 System.out.println(user); 5 }
控制臺輸出:

4、第四種方式使用BeanListHandler(將查詢結果封裝為javaBean并存入到一個List集合中):
1 public static void dqlUseBeanListHandler() throws SQLException { //將所有的查詢結果封裝為javaBean,每個javaBean存入到一個list集合中 2 String sql = "select * from user"; 3 List<User> listUser = qr.query(sql,new BeanListHandler<User>(User.class)); 4 for(User user : listUser) { //遍歷結果 5 System.out.println(user); 6 } 7 }
控制臺輸出:

5、第5種處理方式使用ColumnLIstHandler(傳遞一個列名,查詢結果為該列下的所有資料,存入一個List集合中):
1 public static void dqlUseColumnListHandler() throws SQLException { //傳遞一個列名,查詢結果為該列下的所有資料,存入一個List集合中 2 String sql = "select * from user"; 3 List<Object> listUser = qr.query(sql,new ColumnListHandler("uname")); 4 for(Object obj : listUser) { 5 System.out.println(obj); 6 } 7 }
控制臺輸出:

6、第6種方式使用ScalarHandler(查詢結果只有一個):
1 public static void dqlUseScalarHandler() throws SQLException { //查詢結果只有一個 2 String sql = "select count(*) from user"; 3 Object count = qr.query(sql,new ScalarHandler()); 4 System.out.println(count); 5 }
控制臺輸出:

7、第7種處理方式使用MapHandler(將查詢第一條資料的列名與值存入一個Map集合):
1 public static void sqlUserMapHandler() throws SQLException { //查詢結果的第一條資料存入一個map集合種 2 String sql = "select * from user"; 3 Map<String,Object> map = qr.query(sql,new MapHandler()); 4 for(String key : map.keySet()) { //遍歷結果集 5 System.out.print(key + " "+map.get(key)+" "); 6 } 7 }
控制臺輸出:

8、第8種處理方式使用MapHandler(將查詢到的結果存入一個map集合中):
1 public static void sqlUserMapListHandle() throws SQLException { //將查詢到的所有結果的列名與對應的值存入map集合中,map過多存入list集合 2 String sql = "select * from user"; 3 List<Map<String,Object>> list = qr.query(sql,new MapListHandler()); 4 for(Map<String,Object> map : list) { //遍歷集合 5 for(String key : map.keySet()) { 6 System.out.print(map.get(key) + " "); 7 } 8 System.out.println(" "); 9 } 10 }
控制臺輸出:

完 2020-06-02 20:47:14
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/174994.html
標籤:Java
上一篇:Spring Boot初學
下一篇:JAVA8 Stream流
