DBUtils的使用详解

一、DBUtils简介

1、什么是DBUtils
DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean。
commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,使用dbutils能极大简化jdbc编码的工作量,也不会影响程序的性能。

2、DBUtils优点
杜绝资源泄露。修正JDBC代码并不困难,但是这是耗时而乏味的,这通常导致连接泄露并且难以跟踪到。
  清洁干净的持久化代码。大段的持久化数据到数据库代码彻底精简,剩下的代码清晰地表达了编码的意图。
  从ResultSet里自动组装JavaBean。你不再需要手工set每一行每一列的值到bean中,每一行数据都将会以一个Bean实例的形式出现

二、DBUtils包

1、org.apache.commons.dbutils (该包中的类主要帮助我们更便捷的操作JDBC)
2、org.apache.commons.dbutils.handlers(该包中的类都是实现org.apache.commons.dbutils.ResultSetHandler接口的实现类)
3、org.apache.commons.dbutils.wrappers(该包中的类主要是封装了对Sql结果集的操作)

三、DBUtils(两类一接口)

1、DBUtils类

DbUtils是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的。
这个类里的重要方法有:
(1)close()
(2)CloseQuietly
(3)CommitAndCloseQuietly(Connection conn)

2、 QureryRunner类

该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
  QueryRunner类提供了两个构造方法:
  (1)一个是一个空构造器;
  (2)另一个则拿一个 javax.sql.DataSource 来作为参数。
  这个类里的重要方法有:
(1)public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数
(2)public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException
(3)public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException :执行一个不需要置换参数的查询操作
(4)public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作
(5)public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作

3、ResultSetHandler接口

该接口用于处理Java.sql.ResultSet,将数据按要求转换为另一种形式。ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet rs)。因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象

四、使用

 public class DBTest {
    
        public static void main(String[] args) {
            insertData();
            updateData();
            selectData();
            deleteData();
            insertDataWithParams(1002,"xzj",21);
        }
    
        public static void insertData() {
            // 获取数据库连接
            Connection conn = connectDB();
            // 创建SQL执行工具
            QueryRunner runner = new QueryRunner();
            String sql = "insert into user(userId,userName,age) values(1001,'zx',21)";
            int num;
            try {
                num = runner.update(conn, sql);
                System.out.println("成功插入" + num + "条数据!");
            } catch (SQLException e) {
                e.printStackTrace();
            }
            // 关闭数据库连接
            DbUtils.closeQuietly(conn);
        }
    
        public static void insertDataWithParams(int userId, String userName, int age) {
            // 获取数据库连接
            Connection conn = connectDB();
            // 创建SQL执行工具
            QueryRunner runner = new QueryRunner();
            String sql = "insert into user(userId,userName,age) values(?,?,?)";
            Object[] params = { userId, userName, age };
            try {
                int num = runner.update(conn, sql, params);
                System.out.println("成功插入" + num + "条数据!");
            } catch (SQLException e) {
                e.printStackTrace();
            }
            DbUtils.closeQuietly(conn);
        }
    
        public static void updateData() {
            // 获取数据库连接
            Connection conn = connectDB();
            // 创建SQL执行工具
            QueryRunner runner = new QueryRunner();
            String sql = "update user set userName='xz' where userId=1001";
            try {
                int num = runner.update(conn, sql);
                System.out.println("成功更新" + num + "条数据!");
            } catch (SQLException e) {
                e.printStackTrace();
            }
            DbUtils.closeQuietly(conn);
        }
    
        public static void deleteData() {
            // 获取数据库连接
            Connection conn = connectDB();
            // 创建SQL执行工具
            QueryRunner runner = new QueryRunner();
            String sql = "delete from user where userName='xz'";
            try {
                int num = runner.update(conn, sql);
                System.out.println("成功删除" + num + "条数据!");
            } catch (Exception e) {
                e.printStackTrace();
            }
            DbUtils.closeQuietly(conn);
        }
    
        public static void selectData() {
            // 获取数据库连接
            Connection conn = connectDB();
            // 创建SQL执行工具
            QueryRunner runner = new QueryRunner();
            String sql = "select * from user where userId=1001";
            ArrayList<StudentBean> userList;
            try {
                userList = runner.query(conn, sql,new BeanListHandler(StudentBean.class));
                System.out.println("userList size is:"+userList.size());
                for (StudentBean studentBean : userList) {
                    System.out.println(studentBean);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            DbUtils.closeQuietly(conn);
        }
    
        public static Connection connectDB() {
            String driverClassName = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://10.1.40.61:3306/test_bid_system?useUnicode=true&characterEncoding=utf8";
            String userName = "root";
            String password = "root";
            Connection conn = null;
            try {
                Class.forName(driverClassName);
                conn = DriverManager.getConnection(url, userName, password);
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("获取数据库连接成功!");
            return conn;
        }
    
    }

五、注意事项

1、DBUtils是JDBC的简单封装,可以和JDBC混合使用。
2、DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:必须满足JavaBean的规范,其次Bean的getter与setter方法的名字与结果集的列名一一对应,而不要求JavaBean的私有成员与表结果集列名一一对应。
3、DBUtils可以将结果集封装为各种类型,主要有:Bean/List,Map/List/Map,数组/List<数组>,列/List<列>,这些类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值