dbutils使用说明

    科技2026-04-21  3

    1、Commonsdbutils是什么? commons-dbutils是Apache组织提供的一个开源JDBC工具类库,对传统操作数据库的类进行二次封装,可以把结果集转化成List。

    2、Commonsdbutils主要相关类及接口的简介: 主要讲解两个类(org.apache.commons.dbutils.DbUtils和org.apache.commons.dbutils.QueryRunner)和一个接口(org.apache.commons.dbutils.ResultSethandler)。

    (1)DbUtils类为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的。 A:loadDriver(StringdriveClassName):这一方法装载并注册JDBC驱动程序,如果成功就返回TRUE,不需要去捕捉ClassNotFoundException异常。通过返回值判断驱动程序是否加载成功。 B:close方法:DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭连接(Connection)、声明(Statement)或者结果集(ResultSet)对象。 C:closeQuietly方法:closeQuietly这一方法不仅能在连接、声明或者结果集为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLException。如果你不想捕捉这些异常的话,这对你是非常有用的。在重载closeQuietly方法时,特别有用的一个方法是closeQuietly(Connectionconn,Statementstmt,ResultSetrs),使用这一方法,你最后的块就可以只需要调用这一方法即可。 D:commitAndCloseQuietly(Connectionconn)方法和commitAndClose(Connectionconn)方法:这两个方法用来提交连接,然后关闭连接,不同的是commitAndCloseQuietly(Connectionconn)方法关闭连接时不向上抛出在关闭时发生的一些SQL异常而commitAndClose(Connectionconn)方法向上抛出SQL异常。

    (2)QueryRunner类该类简单化了SQL查询,它与ResultSetHandler(接口后面将会介绍)组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量【构造函数(1):QueryRunner()(2):QueryRunner(Datasourceds)】。 A:query(Connectionconn,Stringsql,Object[]params,ResultSetHandlerrsh)方法:这一方法执行一个带参数的选择查询,在这个查询中,对象阵列的值被用来作为查询的置换参数。这一方法内在地处理PreparedStatement和ResultSet的创建和关闭。ResultSetHandler对象把从ResultSet得来的数据转变成一个更容易的或是应用程序特定的格式来使用。 B:query(Stringsql,Object[]params,ResultSetHandlerrsh)方法:这几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造器的数据源(DataSource)或使用的setDataSource方法中重新获得的。 C:query(Connectionconn,Stringsql,ResultSetHandlerrsh)方法:这执行一个带参数的选择查询。 D:update(Connectionconn,Stringsql,Object[]params)方法:这一方法被用来执行一个带参数的插入、更新或删除操作。对象阵列为声明保存着置换参数。 E:update(Stringsql,Object[]params)方法:这几乎与上一种种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造器的数据源(DataSource)或使用的setDataSource方法中重新获得的。 F:update(Connectionconn,Stringsql)方法:这执行一个带参数的插入、更新或删除操作。 (3)ResultSetHandler接口 正如它的名字所示,这一接口执行处理一个java.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更容易。这一组件提供了 ArrayHandler:将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[] BeanHandler:将ResultSet中第一行的数据转化成类对象 BeanListHandler:将ResultSet中所有的数据转化成List,List中存放的是类对象 ColumnListHandler:将ResultSet中某一列的数据存成List,List中存放的是Object 对象KeyedHandler:将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据 MapHandler:将ResultSet中第一行的数据存成Map映射 MapListHandler:将ResultSet中所有的数据存成List。List中存放的是Map ScalarHandler:将ResultSet中一条记录的其中某一列的数据存成Object等转化类。ResultSetHandler接口提供了一个单独的方法: Objecthandle(java.sql.ResultSet.rs)。因此任何ResultSetHandler的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。如果你发现这七个执行程序中没有任何一个提供了你想要的服务,你可以自己写执行程序并使用它。 例:

    packagecom.mrkay.commons; importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.SQLException; importjava.util.Iterator; importjava.util.List;importjava.util.Map; importorg.apache.commons.dbutils.DbUtils; importorg.apache.commons.dbutils.QueryRunner; importorg.apache.commons.dbutils.handlers.MapListHandler; public class DbUtiles{ privatestaticConnectionconn; Public static Connection getConnection(){ String url="jdbc:mysql://localhost:3306/info_db" String driverClassName="org.gjt.mm.mysql.Driver" String username="root"; String password="root"; Connection conn=null; DbUtils.loadDriver(driverClassName)try{ Conn DriverManager.getConnection(url,username,password)}catch(SQLExceptione){ e.printStackTrace()} return conn; } public static void main(String[] args){ conn =getConnection(); QueryRunnerqr=newQueryRunner(); List al=null; try{ al=(List)qr.query(conn,"select*fromguestbook",new MapListHandler())}catch(SQLExceptione){ e.printStackTrace()} Iterator ite=al.iterator()while(ite.hasNext()){ Map map=(Map)ite.next(); System.out.println(map.get("name"))} } }
    Processed: 0.009, SQL: 10