• DbUtils


    DbUtils

    1、这是Apache公司出的一个工具集,用于方便Web开发中关于数据库的操作。最大的好处就是,在SQL查询的时候,可以返回一个MapList 或者BeanList对象。首先到官网下载相关包,引用commons-dbutils.jar 包到项目中.

    ·     项目主页:http://commons.apache.org/dbutils/

    ·     文档地址:http://commons.apache.org/dbutils/examples.html

    ·     下载地址:http://commons.apache.org/downloads/download_dbutils.cgi

    String url="jdbc:oracle:thin:@192.168.1.101:1521:ora9";
    String sql="select id,name,phone,email from guestbook order by id desc";
    DbUtils.loadDriver("oracle.jdbc.driver.OracleDriver");
    try
     {
                Connection conn=DriverManager.getConnection(url,"scott","tiger");
                QueryRunner qr = new QueryRunner();
                List result=(List)qr.query(conn,sql,new MapListHandler());
                DbUtils.close(conn);

     }


        
    qr.query()这个函数中,还可以选择一个BeanList 对象 

    List results=(List)qr.query(conn,sql,new BeanListHandler(Guestbook.class));


       
    这样的好处是可以直接得到javaBean 的对象,把它直接保存在request 对象中,方便显示层的jsp 页面调用

    request.setAttribute("BeanName",BeanList)


       
    同时,这里也可以用数据连结池实现数据库的连接
     

    String sql="insert into guestbook(id,name,email) values (gb_seq.nextval,?,?)";
    String[] param = {"abc","abc@163.com"};

    Context context = new InitialContext();
    DataSource ds = context.lookup("java:/comp/env/jdbc/oracleds"); 
    QueryRunner qr=new QueryRunner(ds);
    qr.update(sql,param);

        

     2 JDBC码是Java译码的一个部分,它给已写的编码带来了数量惊人的重复。另外,JDBC码几乎会经常性的带来一些低级错

    误。写出好的JDBC编码并不难,但是很痛苦。

    DbUtils组件是一个精密而简单的组件,它并不做什么复杂的事而仅仅只是使很多的JDBC任务对开发者来说变得稍容易一点

    。尽管这时候很多持久框架和包都可以用来使数据持久变得更容易,然而JDBC仍然是大多数JavaJava2企业版(J2EE)开发

    者赖以生存的工具。因此,任何能让使用JDBC工作更容易的东西都是好消息。

    DbUtils可以免费下载,它不依赖于任何其它的通用组件而只是依赖下面这些:

    Java DevelopmentKit (JDK) 1.2 (or later)
    JDBC 2.0 (or later)

     DbUtils文档并不是最好的,但是足以使你的工作正常进行。在下一节,你会看到DbUtils中最有用的类以及一些关于它们

    的用法的例子。你应该能够很容易地使用这些编码和例子,然后能够马上在你自己的项目中开始使用DbUtils。我将会集中

    精力于两个类(org.apache.commons.dbutils.DbUtils  org.apache.commons.dbutils.QueryRunner)和一个接口

    org.apache.commons.dbutils.ResultSethandler.在我给你们一些关于它们的用法的例子之前,让我们深入DbUtils

    面来仔细看看它给我们提供了些什么。

    DbUtils
    DbUtils
    是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态

    的。
    这个类里的重要方法有:

    closeDbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭连接

    、声明和结果集(ResultSet)。
    CloseQuietly: CloseQuietly
    这一方法不仅能在连接、声明或者结果集(ResultSet)为NULL情况下避免关闭,还能隐藏一

    些在程序中抛出的SQLEeception。如果你不想捕捉这些异常的话,这对你是非常有用的。在重载CloseQuietly方法时,特

    别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),这是因为在大多数情况下,连接、

    声明和结果集(ResultSet)是你要用的三样东西,而且在最后的块你必须关闭它们。使用这一方法,你最后的块就可以只

    需要调用这一方法即可。
    CommitAndCloseQuietly(Connection conn)
    :这一方法用来提交连接,然后关闭连接,并且在关闭连接时不向上抛出在关

    闭时发生的一些SQL异常。
    LoadDriver(String driveClassName):
    这一方法装载并注册JDBC驱动程序,如果成功就返回TRUE。使用这种方法,你不需

    要去捕捉这个异常ClassNotFoundException。使用loadDrive方法,编码就变得更容易理解,你也就得到了一个很好的

    Boolean返回值,这个返回值会告诉你驱动类是不是已经加载成功了。
    ResultSetHandler
    正如它的名字所提示的,这一接口执行处理一个jaca.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其

    应用而且使用起来更容易。这一组件提供了ArrayHandler,ArrayListHandler, BeanHandler, BeanListHandler,

    MapHandler,MapListHandler, and ScalarHandler等执行程序。

    ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。因此任何ResultSetHandler

    的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。因为返回类型是

    java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。如果你发现这七个执

    行程序中没有任何一个提供了你想要的服务,你可以自己写执行程序并使用它。

    QreryRunner
    这个类使执行SQL查询简单化了,它与ResultSetHandler串联在一起有效地履行着一些平常的任务,它能够大大减少你所要

    写的编码。QueryRunner类提供了两个构造器:其中一个是一个空构造器,另一个则拿一个javax.sql.DataSource 来作为

    参数。因此,在你不用为一个方法提供一个数据库连接来作为参数的情况下,提供给构造器的数据源(DataSource) 被用来

    获得一个新的连接并将继续进行下去。

    这一类中的重要方法包括以下这些:

    query(Connectionconn, String sql, Object[] params, ResultSetHandler rsh):这一方法执行一个选择查询,在这个

    查询中,对象阵列的值被用来作为查询的置换参数。这一方法内在地处理PreparedStatement ResultSet  的创建和关闭

    ResultSetHandler对把从 ResultSet得来的数据转变成一个更容易的或是应用程序特定的格式来使用。
    query(String sql, Object[] params, ResultSetHandler rsh):
    这几乎与第一种方法一样;唯一的不同在于它不将数据库

    连接提供给方法,并且它是从提供给构造器的数据源(DataSource) 或使用的setDAtaSource 方法中重新获得的。
    query(Connection conn, String sql, ResultSetHandler rsh):
    这执行一个不要参数的选择查询。
    update(Connection conn, String sql, Object[] params):
    这一方法被用来执行一个插入、更新或删除操作。对象阵列为

    声明保存着置换参数。
     

    现在让我们来看一个例子,在这里你可以从一个数据库中获得一些数据。比如说,我正在使用MySQL 数据库.你还需要下载

    MYSQL JDBC驱动程序。我正在使用的MySQL数据库在本地主机,端口号为3306上运行。这个数据库地名字叫做test。你将要

    用到的Student表的结构如下:
    Columns    Type
    -------    ----
    StudId     int
    Name      varchar

    在列表A中,你将会从Student表中得到一些信息,而且你可以按照你自己的额外需要修改这些信息。尽管你在使用JDBC

    但要注意你几乎没写JDBC编码。(你可能要改变在例子中所规定的用户名和密码,这是以你的具体的数据库配置为基础的。

    )
    这个编码遵从以下步骤:

    1.加载JDBC驱动程序类,并用DriverManager来得到一个数据库连接。

    2.例示 QueryRunner 类。

    3.使用连接、SQL查询、参数和ResultSetHandler来作为输入的查询方法。你使用一个类

    org.apache.commons.dbutils.handlers.MapListHandler,一个类 MapListHandler来获得一个结果集(ResultSet)并返

    回一个jaca.util.Map的实例java.util.List。因此结果集(ResultSet)的每一行都变成了一个java.util.Map,所有这些

    java.util.Map的实例绑在一起放在一个java.util.List 中。

    4. 反复得到列表(List)的值就是通过在列表(List)中获得每一个Map的值。

    5.QueryRunner 来执行一个没有参数的方法。在这里你要用BeanListHandler ,它是一个非常有用的ResultSetHandler

    ,因为你可以把ResultSet 转变成一个指定的Bean的列表中。这时你可以指定一个Bean类到Bean StudentBean中,如同在

    列表B中所显示的那样。

    6. 你通过反复从列表(List)中得到多个bean,然后就可从每一个StudentBean实例中获取值。

    注释:在列表B中,StudentBean 类中的StudId 必须是int,这是因为表StudentStudId列的类型是int。坚持这个类型的

    匹配是我们需要遵从的唯一规则。

    因为在这种情况下,StudentBean 类的属性和表Student 的字段是完好的对映着的,只要将StuentBean 类作为一个参数就

    是一个技巧。字段值用和字段名一样的名字插入到类的属性中。然而,如果你想要更多地控制bean的创建,则类

    BeanListHandler提供了第二个构造器:BeanListHandler(java.lang.Class type, RowProcessorconvert). 接口

    Rowprocessor的执行把结果集(ResultSet)的各行转化成一个对象组。在 StudentBean这一案例中,RowProcessor中的

    BasicRowProcessor 的执行被利用上了,它能够执行这项任务。然而,你可以写一个新的执行并把它提供给

    BeanListHandler的构造器。

    当然,执行这一编码的输出取决于你从表Student中获得哪些数据。对我来说,我得到了以下这些输出:
    ***Using MapListHandler***
      Id >>1
      Name >>One
      Id >>2
      Name >>Two
    ***Using BeanListHandler***
      Id >>1
      Name >>One
      Id >>2
      Name >>Two
      Id >>3
      Name >>Three

    除了到目前为止你已经看了的类以外,另外一些你需要研究的类是:

    org.apache.commons.dbutils.QueryLoader:QueryLoader是一个从一个文件加载查询到一个Map的简单的类。然后,当需要

    的时候,你从 Map 中选择一些查询。在没有专门去接触代码的情况下,一个文件中的Having查询也可以改变得尽可能的简

    单。
    org.apache.commons.dbutils.wrappers.SqlNullCheckedResultSet:
    这个类对使用一个系统方法来解决NULL值问题是很有

    用的。用一个 SqINullCheckedResultSet 的实例来限制一个常规的结果集(ResultSet),然后详细地说明在遇NULL值的

    情况下应该做些什么。
    org.apache.commons.dbutils.wrappers.StringTrimmedResultSet:
    用类StringTrimmedResultSet 来约束一个结果集,这

    样一来,你就可以修整所有getString()getObject()方法返回的字符串。
    DbUtils
    组件很好也很小巧,很值得在所有用到JDBC的项目中去使用。

    廖世勇
  • 相关阅读:
    第三部分 学习shell与shell scipt---第九章 vim程序编辑器
    端口映射与容器互联
    在web工程中如何查看编译后class路径
    Spring配置JDBC连接Orcale、MySql、sqlserver
    org.springframework.beans.factory.BeanNotOfRequiredTypeException错误
    windows系统中如何启动两个tomcat
    eclipse+maven搭建SSM框架
    windows下安装和配置多个版本的JDK
    java环境变量为1.7jdk为何在dos窗口中查看版本为1.8
    查看jdk、eclipse、tomcat的是32位还是64
  • 原文地址:https://www.cnblogs.com/liaoshiyong/p/3150976.html
Copyright © 2020-2023  润新知