(java)了解与学习使用DBUtils

一、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.cnblogs.com/wmskywm/p/13033302.html