DBUtils的简单实现

前言:commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

步骤1、导入DBUtils jar包

博主免费上传或者自行下载最新版:

 

步骤2、查看dbutils的帮助文档。

打开commons-dbutils-1.3\apidocs目录下的index.html,做简单了解:其中QueryRunner类中提供了对sql语句操作的API:

QueryRunner类:

      update(connection,sql,params):执行任何增删改

      query(connection,sql,ResultSetHandler,params):执行任何查询

ResultSetHandler接口:

      BeanHandler:将结果集的第一行,封装成对象,并返回 new BeanHandler<>(xx.class)

      BeanListHandler:将结果集中的所有行,封装成对象的集合,并返回 new BeanListHandler(xx.class)

      ScalarHandler:将结果集中的第一行第一列,以Object形式返回 new ScalarHandler()

 

步骤3、简单代码实现:

数据库以Admin表为例:

之前还要创建一个Druid德鲁伊数据库连接池获取连接对象:JDBCUtildByBruid.java

/*
* 此类是通过德鲁伊数据库连接池获取连接对象
* */
public class JDBCUtilsByDruid {
    static javax.sql.DataSource ds;
    static{
        try {
            Properties properties = new Properties();
            properties.load(new FileInputStream("src\\jdbc.properties"));

            //1.创建一个指定参数的数据库连接池
            ds = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws Exception {

        //2.从数据库连接池中获取可用的连接对象
        return ds.getConnection();
    }

    public static void close(Connection connection, Statement statement, ResultSet resultSet) throws SQLException {
        if (connection!=null){
            connection.close();
        }
        if (statement!=null){
            statement.close();
        }
        if (resultSet!=null){
            resultSet.close();
        }
    }
}

定义Admin.java

public class Admin {
    private int id;
    private String username;
    private String password;

    public Admin() {
    }

    public Admin(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String usrename) {
        this.username = usrename;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Admin{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

定义一个DBUtilsDemo.java,其中每个一个Test都可用测试类实现

/*
* 此类用于演示DBUtils的使用
*
* ResultSetHandler
*
* */
public class DBUtilsDemo {

    //以update为例,实现对数据的 增删改 操作

    @Test
    public void testUpdate() throws Exception {

        //1.获取连接
        Connection connection = JDBCUtilsByDruid.getConnection();

        //2、执行增删改
        QueryRunner qr = new QueryRunner();
        int update = qr.update(connection, "update boys set boyname=? where id = 4", "成龙");

        System.out.println(update>0?"success":"failure");

        //3.关闭连接
        JDBCUtilsByDruid.close(connection,null,null);

    }

    //实现对数据的 Query查询 操作

    @Test
    public void testQuerySingle() throws Exception {

        //1.获取连接
        Connection connection = JDBCUtilsByDruid.getConnection();

        //2、执行查询
        QueryRunner qr = new QueryRunner();

        Admin admin = qr.query(connection, "select * from admin where id =?", new BeanHandler<>(Admin.class), 3);
        System.out.println(admin);

        //3.关闭连接
        JDBCUtilsByDruid.close(connection,null,null);

    }

    //实现对数据的 多行查询 操作
    
    @Test
    public void testQueryMulti() throws Exception {

        //1.获取连接
        Connection connection = JDBCUtilsByDruid.getConnection();

        //2、执行多行查询
        QueryRunner qr = new QueryRunner();

//        Admin admin = qr.query(connection, "select * from admin where id =?", new BeanHandler<>(Admin.class), 3);
//        System.out.println(admin);

        List<Boys> list = qr.query(connection, "select * from boys where userCP>?", new BeanListHandler<>(Boys.class), 1);
        for (Boys boys :list){
            System.out.println(boys);
        }

        //3.关闭连接
        JDBCUtilsByDruid.close(connection,null,null);

    }

    //实现对数据的单个查询操作

    @Test
    public void testQueryScalar() throws Exception {

        //1.获取连接
        Connection connection = JDBCUtilsByDruid.getConnection();

        //2、查询单个值
        QueryRunner qr = new QueryRunner();
        Object query = qr.query(connection,"select count(*) from Admin", new ScalarHandler());
        System.out.println(query);

        //3.关闭连接
        JDBCUtilsByDruid.close(connection,null,null);

    }
}

项目结构:

最后:关于Durid德鲁伊连接池工具类,没有说明,感兴趣可以自己学学,或者私信博主。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的数据库连接对象 而不像php asp那样 费时费力的不断重复的构建和析构这样的对象 DBUtils包括3个包: org apache commons dbutils org apache commons dbutils handlers org apache commons dbutils wrappers DBUtils封装了对JDBC的操作 简化了JDBC操作 可以少写代码 org apache commons dbutils DbUtils 关闭链接等操作 QueryRunner 进行查询的操作 org apache commons dbutils handlers 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 org apache commons dbutils wrappers SqlNullCheckedResultSet :对ResultSet进行操作 改版里面的值 StringTrimmedResultSet :去除ResultSet中中字段的左右空格 Trim ">1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值