03015_DBUtils

1、概述

  (1)如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils ;

  (2)DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。

  (3)commons-dbutils-1.6-bin.zip 链接:commons-dbutils-1.6-bin.zip 密码:r1z4 ;

  (4)DBUtils是java编程中的数据库操作实用工具,小巧简单实用;

  (5)DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码;

  (6)Dbutils三个核心功能介绍:

    ①QueryRunner中提供对sql语句操作的API

    ②ResultSetHandler接口,用于定义select操作后,怎样封装结果集;

    ③DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法。

2、QueryRunner核心类

  (1)update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作;

  (2)query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作。

3、QueryRunner实现添加、更新、删除操作

  (1)update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作;

  (2)添加

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 
 4 import org.apache.commons.dbutils.QueryRunner;
 5 
 6 public class TestDBUtils {
 7     public static void main(String[] args) {
 8         try {
 9             // 获取一个用来执行SQL语句的对象 QueryRunner
10             QueryRunner qr = new QueryRunner();
11 
12             String sql = "INSERT INTO sort(sname) VALUES(?)";
13             Object[] params = { "电视机" };
14             Connection conn = JDBCUtils.getConnection();
15             int line = qr.update(conn, sql, params);// 用来完成表数据的增加、删除、更新操作
16             // 结果集处理
17             System.out.println("line = " + line);
18 
19         } catch (SQLException e) {
20             throw new RuntimeException(e);
21         }
22 
23     }
24 
25 }

  (3)更新

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 
 4 import org.apache.commons.dbutils.QueryRunner;
 5 
 6 public class TestDBUtils {
 7     public static void main(String[] args) {
 8         try {
 9             // 获取一个用来执行SQL语句的对象 QueryRunner
10             QueryRunner qr = new QueryRunner();
11 
12             String sql = "UPDATE sort set sid=sid+1 WHERE sname=?";
13             Object[] params = { "电视机" };
14             Connection conn = JDBCUtils.getConnection();
15             int line = qr.update(conn, sql, params);// 用来完成表数据的增加、删除、更新操作
16             // 结果集处理
17             System.out.println("line = " + line);
18 
19         } catch (SQLException e) {
20             throw new RuntimeException(e);
21         }
22 
23     }
24 
25 }

  (4)删除

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 
 4 import org.apache.commons.dbutils.QueryRunner;
 5 
 6 public class TestDBUtils {
 7     public static void main(String[] args) {
 8         try {
 9             // 获取一个用来执行SQL语句的对象 QueryRunner
10             QueryRunner qr = new QueryRunner();
11 
12             String sql = "DELETE FROM sort WHERE sname=?";
13             Object[] params = { "电视机" };
14             Connection conn = JDBCUtils.getConnection();
15             int line = qr.update(conn, sql, params);// 用来完成表数据的增加、删除、更新操作
16             // 结果集处理
17             System.out.println("line = " + line);
18 
19         } catch (SQLException e) {
20             throw new RuntimeException(e);
21         }
22 
23     }
24 
25 }

4、QueryRunner实现查询操作

  (1)query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作;

  (2)ResultSetHandler结果集处理类

  

  (3)JavaBean

    JavaBean就是一个类,在开发中常用封装数据。具有如下特性:

    ①需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序;

    ②提供私有字段:private 类型 字段名;

    ③提供getter/setter方法;

    ④提供无参构造。

 1 public class Sort {
 2     private int sid;
 3     private String sname;
 4 
 5     public Sort() {
 6         super();
 7     }
 8 
 9     public int getSid() {
10         return sid;
11     }
12 
13     public void setSid(int sid) {
14         this.sid = sid;
15     }
16 
17     public String getSname() {
18         return sname;
19     }
20 
21     public void setSname(String sname) {
22         this.sname = sname;
23     }
24 
25     @Override
26     public String toString() {// 该方法可以省略
27         return "Sort[sid=" + sid + ",sname=" + sname + "]";
28     }
29 }

  (4)ArrayHandler与ArrayListHandler查询

    ①ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值。

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 import java.util.Arrays;
 4 
 5 import org.apache.commons.dbutils.QueryRunner;
 6 import org.apache.commons.dbutils.handlers.ArrayHandler;
 7 import org.junit.Test;
 8 
 9 public class ArrayHandlerDemo {
10 
11     @Test
12     public void method() {
13         try {
14             // 获取QueryRunner对象
15             QueryRunner qr = new QueryRunner();
16             // 执行SQL语句
17             String sql = "SELECT * FROM sort";
18             Object[] params = {};
19             Connection conn = JDBCUtils.getConnection();
20             Object[] objArray = qr.query(conn, sql, new ArrayHandler(), params);
21             // 结果集的处理
22             System.out.println(Arrays.toString(objArray));
23 
24             conn.close();
25         } catch (SQLException e) {
26             e.printStackTrace();
27         }
28     }
29 }

  运行结果:

  

  

    ②ArrayListHandler:将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 import java.util.Arrays;
 4 import java.util.List;
 5 
 6 import org.apache.commons.dbutils.QueryRunner;
 7 import org.apache.commons.dbutils.handlers.ArrayListHandler;
 8 import org.junit.Test;
 9 
10 public class ArrayListHandlerDemo {
11     @Test
12     public void method() {
13         try {
14             // 获取QueryRunner对象
15             QueryRunner qr = new QueryRunner();
16             // 执行SQL语句
17             String sql = "SELECT * FROM sort WHERE sid>?";
18             Object[] params = { 4 };
19             Connection conn = JDBCUtils.getConnection();
20             List<Object[]> list = qr.query(conn, sql, new ArrayListHandler(),
21                     params);
22             // 结果集的处理
23             for (Object[] objArray : list) {
24                 System.out.println(Arrays.toString(objArray));
25             }
26 
27             conn.close();
28         } catch (SQLException e) {
29             e.printStackTrace();
30         }
31     }
32 }

  运行结果:

  

  

  (5)BeanHandler与BeanListHandler查询

    ①BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中。

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 
 4 import org.apache.commons.dbutils.QueryRunner;
 5 import org.apache.commons.dbutils.handlers.BeanHandler;
 6 
 7 public class BeanHandlerDemo {
 8     public static void main(String[] args) {
 9 
10         try {
11             // 获取QueryRunner
12             QueryRunner qr = new QueryRunner();
13             // 执行SQL语句
14             String sql = "SELECT * FROM sort WHERE sname=?";
15             Object[] params = { "冰箱" };
16             Connection conn = JDBCUtils.getConnection();
17             Sort s = qr.query(conn, sql, new BeanHandler<Sort>(Sort.class),
18                     params);
19             // 结果集处理
20             System.out.println(s);
21 
22             conn.close();
23         } catch (SQLException e) {
24             throw new RuntimeException(e);
25         }
26 
27     }
28 }

  运行结果:

  
  

    ②BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中。

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 import java.util.List;
 4 
 5 import org.apache.commons.dbutils.QueryRunner;
 6 import org.apache.commons.dbutils.handlers.BeanListHandler;
 7 import org.junit.Test;
 8 
 9 public class BeanListHandlerDemo {
10     @Test
11     public void method() {
12         try {
13             // 获取QueryRunner
14             QueryRunner qr = new QueryRunner();
15             // 执行SQL语句
16             String sql = "SELECT * FROM Sort WHERE sid>?";
17             Object[] params = { 4 };
18             Connection conn = JDBCUtils.getConnection();
19             List<Sort> list = qr.query(conn, sql, new BeanListHandler<Sort>(
20                     Sort.class), params);
21             // 结果集处理
22             for (Sort s : list) {
23                 System.out.println(s);
24             }
25 
26             conn.close();
27         } catch (SQLException e) {
28             throw new RuntimeException(e);
29         }
30     }
31 }

   运行结果:

  

  

  温馨提示:使用DBUtils查询数据,如果使用ArrayListHandler等都能够返回正确值,<br>但使用BeanListHandler 和 BeanHandler则一直返回null,请检查保证实体类的属性名称必须要同数据库中的字段一模一样(区分大小写)。

  (6)ColumnListHandler与ScalarHandler查询

    ①ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中。

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 import java.util.List;
 4 
 5 import org.apache.commons.dbutils.QueryRunner;
 6 import org.apache.commons.dbutils.handlers.ColumnListHandler;
 7 import org.junit.Test;
 8 
 9 public class ColumnListHandlerDemo {
10     @Test
11     public void method() {
12         try {
13             // 获取QueryRunner对象
14             QueryRunner qr = new QueryRunner();
15             // 执行SQL语句
16             String sql = "SELECT sname FROM Sort WHERE sid>?";
17             Object[] params = { 4 };
18             Connection conn = JDBCUtils.getConnection();
19             List<String> list = qr.query(conn, sql,
20                     new ColumnListHandler<String>(), params);
21             // 结果集的处理
22             for (String str : list) {
23                 System.out.println(str);
24             }
25 
26             conn.close();
27         } catch (SQLException e) {
28             e.printStackTrace();
29         }
30     }
31 }

  运行结果:

  

  

    ②ScalarHandler:它是用于单数据。例如select count(*) from 表操作。

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 
 4 import org.apache.commons.dbutils.QueryRunner;
 5 import org.apache.commons.dbutils.handlers.ScalarHandler;
 6 import org.junit.Test;
 7 
 8 public class ScalarHandlerDemo {
 9     @Test
10     public void method() {
11         try {
12             // 获取QueryRunner对象
13             QueryRunner qr = new QueryRunner();
14 
15             // 执行SQL语句
16             String sql = "SELECT MAX(sid) FROM Sort";
17             Object[] params = {};
18             Connection conn = JDBCUtils.getConnection();
19             Integer max = qr.query(conn, sql, new ScalarHandler<Integer>(),
20                     params);
21             // 结果集的处理
22             System.out.println("max=" + max);
23 
24             conn.close();
25         } catch (SQLException e) {
26             e.printStackTrace();
27         }
28     }
29 }

  运行结果:

  

  

原文地址:https://www.cnblogs.com/gzdlh/p/8111831.html