zoukankan      html  css  js  c++  java
  • 如何使用DBUtils

    如何使用DButils

    一丶首先什么是DButils呢?

    DButils是操作数据库的组件,对传统操作数据库的类进行二次封装,可以把结果集转化成List,是java编程中的数据库操作实用工具,小巧简单实用。(PS:传统操作数据库的类指的是JDBC(java database connectivity)java数据库连接,java的数据库操作的基础API。

    二丶DButils类

    为了实现一些提供给常规工作有用方法的类(关闭连接丶装载JDBC驱动程序等),其里面的所有的方法都是静态(static)的。

    1. Close方法:DButils提供了三个重载的关闭方法。这些方法检查所提供的参数是不是空NULL,if not NULL,它们就会关闭连接(Connection)丶声明(Statement)或结果集(ResultSet)对象。

    2. CloseQuietly方法:CloseQuietly方法不仅可以隐藏一些程序抛出的SQL Exception,还可以在连接(Connection)丶声明(Statement)或结果集(ResultSet)为空(NULL)的情况下避免关闭。在重载CloseQuietly方法时,使用CloseQuietly(Connection *conn,Statement stmtResultSet rs),最后的块就可以只需要调用这个方法即可。

    3. commitAndCloseQuietly方法:用来提交连接然后关闭连接

    4. commitAndClose方法:作用同3,和3不同的是其在关闭连接时向上抛出SQL异常,而3不会抛出SQL异常。

    5.Load Driver(string drive Class Name):重载并注册了JDBC驱动程序,如果成功返回true,无需捕捉ClassNotFoundException异常,通过返回值就可以判断驱动程序是否加载成功。

    三丶ResultSetHandler接口
      
      此接口执行处理一个Java.SQL.ResultSet,将数据转变并处理为任何一种形式,这样又更加方便其应用,使用起来也更加简单。
      
    1.Array Handler:将ResultSet中第一行的数据转化为对象数组。

    2.ArrayListHandler:将ResultSet中所有的数据转化为List,List中存放的是Object[]。

    3.Bean Handler:将ResultSet中第一行的数据转化为类对象。

    4.BeanListHandler:将ResultSet中所有的数据转化为List,List中存放的是类对象。

    详细用法如下:

    import org.apache.commons.dbutils.DbUtils;  
    import org.apache.commons.dbutils.QueryRunner;  
    import org.apache.commons.dbutils.handlers.MapListHandler;  
    
    import java.sql.Connection;  
    import java.sql.DriverManager;  
    import java.sql.SQLException;  
    
    import java.util.Map;  
    import java.util.List;  
    
    public class DbUtilsUseMapMySQL {  
    public static void main(String[] args) {  
    Connection conn = null;  
    String jdbcURL = "jdbc:mysql://Dell/Desktop/octopus";  
    String jdbcDriver = "com.mysql.jdbc.Driver";  
    String user = "root";  
    String password = "root";  
    
    try {  
    DbUtils.loadDriver(jdbcDriver);  
    conn = DriverManager.getConnection(jdbcURL, user, password);  
    
    QueryRunner qRunner = new QueryRunner(); 
    
    List mapList = (List) qRunner.query(conn, "select id, name from animals_table",  
    new MapListHandler());  
    
    for (int i = 0; i < mapList.size(); i++) {  
    Map map = (Map) mapList.get(i);  
    System.out.println("id=" + map.get("id"));  
    System.out.println("name=" + map.get("name"));  
    System.out.println("—————–");  
    }  
    
    System.out.println("DbUtils_UseMap_MySQL: end.");  
    
    } catch (SQLException e) {  
    // handle the exception  
    e.printStackTrace();  
    } finally {  
    DbUtils.closeQuietly(conn);  
    }  
    }  
    }  
    
    class Employee {  
    private int id;  
    private String name;  
    public Employee() {  
    }  
    public void setName(String name) {  
    this.name = name;  
    }  
    public String getName() {  
    return this.name;  
    }  
    
    public void setId(int id) {  
    this.id = id;  
    }  
    
    public int getId() {  
    return this.id;  
    }  
    
    public void print() {  
    System.out.println("id=" + id + " name=" + name);  
    }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    5.此外还有ColumnListHandler(将ResultSet中某一列的数据存贮为List)Keyed Handler(将ResultSet中存成映射)Map Handler丶Map List Handler丶Scalar Handler等方法。

    四丶Query Runner类

    不仅简化了SQL查询操作,并且它与ResultSetHandler接口组合一起使用可以完成绝大多数的数据库操作,大大减少了我们作为程序猿所需要写的代码量。
      此类包含了QueryRunner()和Query Runner(DataSource ds)方法。

    注:①query(Connection conn,String SQL,Object[]paramst)方法:可以执行一个带参的选择select。

    例如:

     String sql = "select * from users";
    Object[] rs = runner.query(sql, new ArrayHandler());
    // Print: ArrayHandler: [1, 测试用户1, test1, jiseflwes, 10, false]
    System.out.println("ArrayHandler: " + Arrays.toString(rs));
    
    • 1
    • 2
    • 3
    • 4

    ②update(Connection conn,String SQL,Object[]paramst)方法:执行一个带参的insert,update,delete/alter 操作。
     ③update(String SQL,Object[]paramst)方法:与②不同的是其是从DATa Source/Set DATa Source方法中重新获得的。

    五丶使用DButils的基本步骤

    1.导入DbUtils使用的jar包
    2.新建DbUtilsTest.java单元测试类
    3.查看现有数据库数据
    4.输入所需操作的代码
    5.查看执行后的数据库结果
    6.接下来测试插入方法,插入一条新数据
    7.查看数据库执行结果
    8.测试更新,更新刚插入的数据
    以上适用于更新插入删除操作。

    六丶DBUtils设计原则
    ①小 - DBUtils库的大小非常小,类较少,因此易于理解和使用。
    ②透明 - DBUtils库在幕后工作量不大。 它只需要查询和执行。
    ③快速 - DBUtils库类不会创建许多后台对象,并且在数据库操作执行方面非常快。

    七丶如何配置DBUtils?

    1.配置Java

    ①JAVA_HOME -此环境变量应该指向你安装JDK的目录,例如C: Program Files Java JDK1.5.0

    ②CLASSPATH - 此环境变量应设置适当的路径,例如C: Program Files Java jdk1.5.0_20 jre lib

    ③PATH - 此环境变量应指向适当的JRE bin,例如C: Program Files Java jre1.5.0_20 bin
    (如之前已经配置完成则只需检查一下是否还能够正常使用即可)

    2.安装数据库

    安装适合自己的系统的数据库,一般方便学习的话,可以使用MySql,基于自己计算机的操作系统选择32bit或64bit从官网下载安装即可。

    3.安装Database Drivers

    最新的JDK包括JDBC-ODBC Bridge驱动程序,它使大多数开放式数据库连接(ODBC)驱动程序可供使用JDBC API的程序员使用。

    4.从官网下载Commons DBUtils Archive

    5.配置Apache Common DBUtils环境

    设置环境变量 APACHE_HOME 到 C:Apache

    6.配置CLASSPATH变量

    设置环境变量 CLASSPATHto%CLASSPATH%;%APACHE_HOME%commons-dbutils-1.7.jar;mysql-connector-java-5.1.28.jar;commons-dbcp2-2.1.1.jar;commons-pool2-2.4.3.jar;commons-logging-1.2.jar;

    八丶常见问题

    1.QueryRunner 下的方法不是每个方法都设成关闭连接的
    2. Dbutils 在做表到对象的映射时要求列名和对象的属性名必须一致
    3.必须满足JavaBean的规范,其次Bean的getter与setter方法的名字与结果集的列名一一对应,而不要求JavaBean的私有成员与表结果集列名一一对应。
    4.DBUtils执行insert插入操作的时候,无法返回自增主键。
    5.能使用包装类型就不要使用基本类型(why?实际上就是为了保证在查询结果为null的时候,不会因为给基本类型赋空值而发生错误)

    int a1 = (Integer) null;
    boolean x1 = (Boolean)null;//错误
    
    Integer a2 = (Integer) null;
    Boolean x2 = (Boolean)null;//正确
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6.DBUtils可以将结果集封装为各种类型,主要有:Bean/List,Map/List/Map,数组/List<数组>,列/List<列>,这些类型。

  • 相关阅读:
    数据分析系统DIY1/3:CentOS7+MariaDB安装纪实
    NSArray与NSString、NSData,NSDictionary与NSString、NSData 相互转化
    Geek地生活,文艺地思考
    Android开发中遇到的问题(五)——Eclipse导入Android项目出现"Invalid project description overlaps the location of another project"错误的解决办法
    Android开发中遇到的问题(四)——Android中WARNING: Application does not specify an API level requirement!的解决方法
    Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件
    Android开发中遇到的问题(二)——新建android工程的时候eclipse没有生成MainActivity和layout布局
    Android开发学习总结(三)——appcompat_v7项目说明
    Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境
    Android开发学习总结(一)——搭建最新版本的Android开发环境
  • 原文地址:https://www.cnblogs.com/5118svip/p/13781934.html
Copyright © 2011-2022 走看看