DBUtils工具类学习

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能

1、特征

DBUtils是java编程中的数据库操作实用工具,小巧简单实用,
1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象,而不像php,asp那样,费时费力的不断重复的构建和析构这样的对象。

2、DBUtils提供了三个核心的功能

2.1QueryRunner中提供对sql语句操作的API

QueryRunner(DataSource ds),提供数据源(连接池),DBUtils底层自动维护了连接Connection
update(String sql, Object...params),执行更新数据
query(String sql,ResultSetHandler rsh,Object... params),执行查询

2.2 ResultSetHandler接口,用于定义select操作后,怎样封装结果集

ArrayHandler:将结果集中的第一条记录封装到Object[]数组中,数组中的每一个元素即使这条记录中的每一个字段的值
ArrayListHandler:将结果集中的每一条记录封装到Object[]数组中,将这些数组再封装到List集合中
BeanHandler:将结果集中的第一条记录封装到一个指定的javabean中
BeanListHandler:将结果集中每一条记录封装到javabean中,将这些javabean再封装到List集合中
ColumnListHandler:将结果集中指定列的字段值封装到一个List集合中
KeyedHandler:将结果集中的每一条记录封装到Map<String,Object>,再讲这个map集合作为另一个Map的value,另一个Map集合的key是指定的字段的值
MapHandler:将结果集中的第一条记录封装到Map<String,Object>集合中,key就是字段名称,value就是字段的值
MapListHandler:将结果集中的每一条记录封装到Map<String,Object>集合中,key就是字段名称,value就是字段的值,再将这些Map封装到List集合中
ScalarHandler:它是用于单数据,列如:select count(1) from 表操作

2.3 DbUtils类,就是一个工具类,定义了关闭资源和事务处理的方法

closeQuietly(Connetion conn)关闭连接,有异常就会抛出
commitAndCloseQuietly(Connetion conn):提交并关闭连接
rollbackAndCloseQuietly(Connetion conn):回滚并关闭连接

3、DBUtils操作代码demo

3.1maven依赖

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>

3.2QueryDbUtils代码

package com.rookie.bigdata.dbutils;

import com.rookie.bigdata.domain.User;
import com.rookie.bigdata.util.C3P0Utils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

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

/**
 * Created by dell on 2019/5/24.
 */
public class QueryDbUtils {

    public static void main(String[] args) {
        //insertMethod();
        //updateMethod();
        //deleteMethod();
        //selectAllUserMethod();
        //selectUserMethod();
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "select count(*) from user ";
           Long count=(Long)qr.query(sql, new ScalarHandler());
            System.out.println(count);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    //查询单个用户方法
    private static void selectUserMethod() {
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "select * from user where username=?";
            Object[] params = {"李四"};
            User user = qr.query(sql, new BeanHandler<User>(User.class), params);

            System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //查询所有的用户信息
    private static void selectAllUserMethod() {
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "select * from user";
            List<User> userList = qr.query(sql, new BeanListHandler<User>(User.class));

            for (User user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //删除操作
    private static void deleteMethod() {
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "delete from user where username=?";
            Object[] params = {"李四"};
            int update = qr.update(sql, params);
            System.out.println("删除了" + update + "记录");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //更新记录操作
    private static void updateMethod() {
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "update user set password=? where username=?";
            Object[] params = {"654321", "李四"};
            int update = qr.update(sql, params);
            System.out.println("更新了" + update + "记录");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 查询操作
     */
    private static void insertMethod() {
        try {
            // 1.创建核心类QueryRunner
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            // 2.编写SQL语句
            String sql = "insert into user values(?,?)";
            // 3.为站位符设置值
            Object[] params = {"李四", "123456"};
            // 4.执行添加操作
            int rows = qr.update(sql, params);
            System.out.println("添加成功!" + rows);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

C3P0Utils.java

package com.rookie.bigdata.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created by dell on 2019/5/23.
 */
public class C3P0Utils {
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");

    public static DataSource getDataSource() {
        return dataSource;
    }

    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    //释放连接回连接池
    public static void close(Connection conn, PreparedStatement pst, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pst != null) {
            try {
                pst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

User.java

package com.rookie.bigdata.domain;

/**
 * Created by dell on 2019/5/25.
 */
public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

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

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

如果有想学习java的程序员,可来我们的java学习扣qun:83078,3865,免费送java的视频教程噢!我每晚上8点还会在群内直播讲解Java知识,欢迎大家前来学习哦 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值