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 + '\'' +
                '}';
    }
}
DBUtils工具类学习一的更多相关文章
- Java学习笔记49(DBUtils工具类二)
		上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ... 
- Java基础-DButils工具类(QueryRunner)详解
		Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ... 
- 30_java之DButils工具类
		01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ... 
- DBUtils工具类的使用
		DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ... 
- DBUtils工具类和DBCP连接池
		今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ... 
- java使用dbutils工具类实现小程序 管家婆记账软件
		1.所需创建的包和 jar包 2.创建表结构 #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ... 
- 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
		1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ... 
- Java学习笔记48(DBUtils工具类一)
		上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回 ... 
- Java学习之DBUtils工具的学习
		简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影 ... 
随机推荐
- Ubuntu系统里的python
			Ubuntu系统里,默认安装python2.7.x版本的python,直接执行python命令,打开的将是python 2.7.x版本:python3版本的需要自行安装,安装成功后,执行python3 ... 
- LeetCode (160) Intersection of Two Linked Lists
			题目 Write a program to find the node at which the intersection of two singly linked lists begins. For ... 
- centos7 killall 命令
			centos7精简安装后,使用中发现没有killall命令. 安装这个包即可: yum install psmisc 
- POJ:1086-Parencodings
			Parencodings Time Limit: 1000MS Memory Limit: 10000K Description Let S = s1 s2-s2n be a well-formed ... 
- local search——配图
- Latex:插入伪代码
			*本文属于转载. *转载链接:https://blog.csdn.net/lwb102063/article/details/53046265 目录 clrscode algorithm algori ... 
- 如何锁定Android系统CPU的频率
			接触到了Android系统的Performance测试,所以有锁定CPU的需求: 由于要首先读取到此系统所支持的CPU频率,之后再所支持的频率中选取你想要的频率,之后进行锁定. 这个过程,手动也是可以 ... 
- 流式处理框架storm浅析(上篇)
			本文来自网易云社区 作者:汪建伟 前言 前一段时间参与哨兵流式监控功能设计,调研了两个可以做流式计算的框架:storm和spark streaming,我负责storm的调研工作.断断续续花了一周的时 ... 
- 爬取本blog的所有标题和链接
			#coding=utf-8 from bs4 import BeautifulSoup import urllib.request for i in range(1,54): url = " ... 
- JDBC 学习笔记(三)—— JDBC 常用接口和类,JDBC 编程步骤
			1. JDBC 常用接口和类 DriverManager 负责管理 JDBC 驱动的服务类,程序中主要的功能是获取连接数据库的 Connection 对象. Connection 代表一个数据库连接对 ... 
