• 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 }

      运行结果:

      

      

  • 相关阅读:
    Revit命令之平面区域
    Revit平面视图控制
    电动手摇两用风机Revit族模型
    中田麻吉
    传递项目标准工具
    Sketchup机电专业BIM插件EngeeringToolBox
    机电专业协同模式
    lumion2.5下载及破解安装详细过程
    人防工程空调设计规范
    BIM软件之BIMsight
  • 原文地址:https://www.cnblogs.com/gzdlh/p/8111831.html
Copyright © 2020-2023  润新知