`
leongod
  • 浏览: 63981 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

commons-dbutils一步学通

阅读更多

1.      介绍

commons-dbutilsApache组织提供的一个开源 JDBC工具类库,能让我们更简单的使用JDBC。它是一个非常小的类包,花几分钟的时间就能掌握它的使用。

2.      下载

进入apache官方网站的commons-dbutils网页:http://commons.apache.org/dbutils/

选择左边导航栏的Download进入下载页面:

Binary:是编译好的jar包;source是源代码包。下载一份Binary到本地。解开后如下图所示:

其中commons-dbutils-1.1.jar就是供使用的jar包;docs是这个组件的帮助文档。下面就通过示例介绍它的使用。

3.      API介绍

commons-dbutils是一个非常小的类包, 无需花费太多时间去阅读它的doc,核心只是两个类 org.apache.commons.dbutils.DbUtilsorg.apache.commons.dbutils.QueryRunner和一个接口org.apache.commons.dbutils.ResultSetHandler

3.1.    DbUtils

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

这个类里的重要方法有:

n  public static void close(…) throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭ConnectionStatementResultSet

n  public static void closeQuietly(…): 这一类方法不仅能在ConnectionStatementResultSetNULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。如果你不想捕捉这些异常的话,这对你是非常有用的。在重载CloseQuietly方法时,特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),这是因为在大多数情况下,连接、声明和结果集(ResultSet)是你要用的三样东西,而且在最后的块你必须关闭它们。使用这一方法,你最后的块就可以只需要调用这一方法即可。

n  public static void CommitAndCloseQuietly(Connection conn) 这一方法用来提交连接,然后关闭连接,并且在关闭连接时不向上抛出在关闭时发生的一些SQL异常。

n  public static boolean loadDriver(java.lang.String driverClassName):这一方法装载并注册JDBC驱动程序,如果成功就返回true。使用这种方法,你不需要去捕捉这个异常ClassNotFoundException

3.2.    QueryRunner

这个类简单化了执行SQL查询,它与ResultSetHandler组合在一起使用就可能完成大部分的数据库操作,它能够大大减少你所的编码量。

QueryRunner类提供了两个构造方法:一个是默认的构造方法;另一个需要一个 javax.sql.DataSource 来作为参数。因此,在你不用为一个方法提供一个数据库连接的情况下,提供给构造器的DataSource)被用来获得一个新的连接并将继续进行下去。

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

n  public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法它会内在地处理PreparedStatement ResultSet 的创建和关闭。最重要的是参数ResultSetHandler把从 ResultSet中获得的数据转成一个更容易的或是应用程序特定的格式供我们使用

n  public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 这几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得的

n  public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不置换参数的查询操作

n  public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除操作。

n  public int update(Connection conn, String sql) throws SQLException:用来执行一个更新操作,不需要置换参数。

3.3.    ResultSetHandler接口

正如它的名字所提示的,这一接口执行处理一个jaca.sql.ResultSet,将数据按要求转换为另一种形式。

ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。。

common-dbutils组件包针对这个接口提供了九个实现类:

n  ArrayHandler:把结果集中的第一行数据转成对象数组。

n  ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。

n  BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

n  BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

n  ColumnListHandler结果集中某一列的数据存放到List中。

n  KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。

n  MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

n  MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

n  ScalarHandler结果集一条记录的其中某一列的数据存成Object

如果这九个实现类中没有任何一个提供了你想要的服务,你可以自己写一个实现类。

3.4.    其它类和接口

org.apache.commons.dbutils.QueryLoader类:属性文件加载器,主要用于加载属性文件中的SQL到内存中。

org.apache.commons.dbutils.wrappers.SqlNullCheckedResultSet类:这个类是用来对sql语句执行完成之后的的数值进行null的替换。

org.apache.commons.dbutils.wrappers.StringTrimmedResultSet:  去除ResultSet中字段的左右空格

org.apache.commons.dbutils.RowProcessor接口: 它提供了把结果集的行数据转换成其它格式的功能。它的实现类是org.apache.commons.dbutils.BasicRowProcessor类。

例子:

表结构可以参照javabean普通

1.数据库连接类:DBConnection.java


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
   
    private static DBConnection instance = new DBConnection();
   
    public static DBConnection getInstance(){
        return instance;
    }
   
    public Connection getConn(){
        Connection conn=null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xxx","xxx", "xxx");
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

2. 普通JavaBean:
InfoBean.java

public class InfoBean {
   
    private String id;
    private String name;
   
    public String getId() {
        return id;
    }
   
    public void setId(String id) {
        this.id = id;
    }
   
    public String getName() {
        return name;
    }
   
    public void setName(String name) {
        this.name = name;
    }
}

3. 数据库操作:Oper.java

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;

public class Oper {
   
    private static Oper instance = new Oper();
   
    public static Oper getInstance(){
        return instance;
    }

    /**
     * 获取全部内容(使用MapListHandler)
     *
     * @return
     */
    public List<?> getAll() throws SQLException{
        String sql="select id,name from test";
       
        return query(sql, null, null);
    }
   
    /**
     * 获取全部内容(使用BeanListHandler)
     *
     * @return
     */
    public List<?> getAllByBean() throws SQLException{
        String sql="select id,name from test";
       
        return query(sql, null, InfoBean.class);
    }
   
    /**
     * 根据条件获取内容
     *
     * @param id
     * @return
     */
    public List<?> getInfoById(String id) throws SQLException{
        String sql="select id,name from test where id = ?";
       
        Object[] object = new Object[1];
        object[0]=id;
       
        return query(sql, object, InfoBean.class);
    }
   
    /**
     * 添加内容
     *
     * @throws SQLException
     */
    public void insert() throws SQLException{
        String sql="insert into test(id,name) values(?,?)";
       
        Object[] object = new Object[2];
        object[0]="5";
        object[1]="ee";
       
        operDB(sql,object);
    }
   
    /**
     * 根据ID修改内容
     *
     * @throws SQLException
     */
    public void update(String id) throws SQLException{
        String sql="update test set name = ? where id = ? ";
       
        Object[] object = new Object[2];
        object[0]="ee1";
        object[1]=id;
       
        operDB(sql,object);
    }
   
    /**
     * 根据ID删除内容
     *
     * @throws SQLException
     */
    public void delete(String id) throws SQLException{
        String sql="delete from test where id = ? ";
       
        Object[] object = new Object[1];
        object[0]=id;
       
        operDB(sql,object);
    }
   
    /**
     * 数据库操作方法
     *
     * @param sql sql语句
     * @param object 参数
     * @throws SQLException
     */
    private void operDB(String sql, Object[] object) throws SQLException{
        Connection conn=DBConnection.getInstance().getConn();
        try {
            QueryRunner qr=new QueryRunner();
            qr.update(conn, sql,object);
        }
        catch (SQLException e) {
            throw e;
        }finally{
            DbUtils.close(conn);
        }
    }
   
    /**
     * 查询操作
     *
     * @param sql sql语句
     * @param param 参数
     * @return
     * @throws SQLException
     */
    public List<?> query(String sql, Object[] param, Class<?> clazz) throws SQLException{
        List<?> list = null;
        Connection conn=DBConnection.getInstance().getConn();
        QueryRunner qr=new QueryRunner();
       
        try {
            if(clazz!=null){
                list=(List<?>)qr.query(conn, sql, new BeanListHandler(clazz), param);
            }else{
                list=(List<?>)qr.query(conn,sql, new MapListHandler(), param);
            }
        }
        catch (SQLException e) {
            throw e;
        }finally{
            DbUtils.close(conn);
        }
        return list;
    }

    public static void main(String[] args) {
       
        try {
            List<?> l=Oper.getInstance().getAll();
            for(Object temp:l){
                Map<?,?> map=(Map<?,?>)temp;
                System.out.println(map.get("name"));
            }
//               
//            List<?> l=Oper.getInstance().getAllByBean();
//            for(Object temp:l){
//                InfoBean ib=(InfoBean)temp;
//                System.out.println(ib.getName());
//            }
//           
//            List<?> l = Oper.getInstance().getInfoById("1");
//            for(Object temp:l){
//                InfoBean ib=(InfoBean)temp;
//                System.out.println(ib.getName());
//            }
           
//            Oper.getInstance().insert();
           
//            Oper.getInstance().update("4");
           
//            Oper.getInstance().delete("5");
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

分享到:
评论

相关推荐

    commons-dbutils-1.7-API文档-中文版.zip

    赠送jar包:commons-dbutils-1.7.jar; 赠送原API文档:commons-dbutils-1.7-javadoc.jar; 赠送源代码:commons-dbutils-1.7-sources.jar; 赠送Maven依赖信息文件:commons-dbutils-1.7.pom; 包含翻译后的API文档...

    commons-dbutils-1.7.rar

    commons-dbutils-1.7.jar,commons-dbutils-1.7-javadoc.jar,commons-dbutils-1.7-sources.jar,commons-dbutils-1.7-tests.jar,commons-dbutils-1.7-test-sources.jar

    commons-dbutils-1.6

    这个项目在1.6版本中包含了两个主要的jar文件:`commons-dbutils-1.6.jar`和`commons-dbutils-1.6-sources.jar`。 `commons-dbutils-1.6.jar`是运行时库,它提供了大量的静态方法来处理数据库操作。这个库的核心...

    commons-dbutils.jar.rar

    `commons-dbutils.jar.rar` 是一个包含Apache Commons DBUtils库的不同版本的压缩文件,主要用于Java应用程序中的数据库操作。DBUtils是一个实用程序库,它简化了JDBC(Java Database Connectivity)的使用,提供了...

    commons-dbutils-1.4.jar

    commons-dbutils-1.4.jar

    commons-dbutils-1.5.jar

    commons-dbutils-1.5.jar

    commons-dbutils-1.6.jar

    commons-dbutils-1.6.jar

    commons-dbutils-1.7.jar

    commons-dbutils-1.7.jar 最新

    commons-dbutils-1.6.rar所有jar包

    这个压缩包文件"commons-dbutils-1.6.rar"包含了DBUtils的1.6版本,这是一个非常受欢迎的开源项目,用于简化Java数据库编程。DBUtils的核心理念是通过提供实用程序类来消除JDBC的繁琐和易错性,使开发人员能够更专注...

    commons-dbutils-1.3.zip

    这个压缩包“commons-dbutils-1.3.zip”包含的是DBUtils库的1.3版本。DBUtils库是Apache Commons项目的一部分,旨在提供一个简单、安全的方式来处理数据库操作,减少与数据库交互时出现的常见错误。 DBUtils的核心...

    commons-dbutils.jarv1.6官方免费版

    commons-dbutils.jar是在java架构开发时十分重要的一款.jar包,正确的使用commons dbutils可以让你的开发事半功倍,如果您在开发过程中缺少这款jar包,马上来下载commonsdbutils jar包吧! 软件功能: commons-...

    commons-dbutils-1.6的jar包

    好用的commons-dbutils-1.6的jar工具包,其中是包含3个:commons-dbutils-1.6.jar、commons-dbutils-1.6-javadoc.jar和commons-dbutils-1.6-sources.jar

    Commons-dbutils1.7 jar包.rar

    commons-dbutils包是Apache开源组织提供的用于操作数据库的工具包。简单来讲,这个工具包就是用来更加方便我们操作数据库的,最近工作中使用了一下,感觉确实方便很多,基本告别自己封装JDBC代码对数据库进行增删改...

    commons-dbutils-1.7

    Apache Commons DbUtils是Java开发中的一个实用工具库,专门针对JDBC(Java Database Connectivity)进行优化,以提供更简洁、高效的数据库操作API。这个库在Java社区中广泛使用,因为它大大减轻了开发者处理数据库...

    commons-dbutils-1.6.jar包

    包org.apache.commons.dbutils DbUtils是一个为简化JDBC操作的小类库. 接口摘要 ResultSetHandler 将ResultSet转换为别的对象的工具. RowProcessor 将ResultSet行转换为别的对象的工具. 类摘要 BasicRowProcessor ...

    commons-dbutils-1.5

    这个"commons-dbutils-1.5"版本是DBUtils项目的早期稳定版本,它包含了对早期JDBC API的良好封装,旨在减少代码量并提高容错性。 DBUtils的核心设计理念是基于数据库操作的事务管理和异常处理,它通过简化常见任务...

Global site tag (gtag.js) - Google Analytics