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工具类学习一的更多相关文章

  1. Java学习笔记49(DBUtils工具类二)

    上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...

  2. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  3. 30_java之DButils工具类

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...

  4. DBUtils工具类的使用

    DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ...

  5. DBUtils工具类和DBCP连接池

    今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...

  6. java使用dbutils工具类实现小程序 管家婆记账软件

    1.所需创建的包和 jar包 2.创建表结构  #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...

  7. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用

    1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...

  8. Java学习笔记48(DBUtils工具类一)

    上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回 ...

  9. Java学习之DBUtils工具的学习

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

随机推荐

  1. 10个MCU常用的基础知识

    转自:http://bbs.21ic.com/icview-2659278-1-1.html 1.MCU有串口外设的话,在加上电平转换芯片,如MAX232.SP3485就是RS232和RS485接口了 ...

  2. poj 2531 分权问题 dfs算法

    题意:一个集合(矩阵) m[i][j]=m[j][i]权值,分成两个集合,使其权值最大.注:在同一个集合中权值只能算一个. 思路:dfs 假设都在集合0 遍历 id 的时候拿到集合1 如果与 id 相 ...

  3. hql的笔记

    删除方法 getSession().delete(arg0); 今天写这个删除语句的时候运用这delete()这个方法,根据id删除记录,hql和普通的sql还是有区别的, 普通的sql封装好了del ...

  4. alex 推荐的书

     这两本书不错, 追风筝的人<白鹿原>~~~反天不错~~~可以看下.14:27:22AndyZhang 2018-1-29 14:27:22 改变人的东西  读书.看电影.旅行.经历各种事 ...

  5. JS实现——Base64编码解码,带16进制显示

    在网上找了个JS实现的Base64编码转换,所以就想自己研究下,界面如下: 将代码以BASE64方式加密.解密 请输入要进行编码或解码的字符: 编码结果以ASCII码16进制显示 解码结果以ASCII ...

  6. 关于ios 和 android 录音(语音)对聊文件格式问题

    关于ios 和 android 录音(语音)对聊文件格式问题 在做语音对讲的时候,将会碰到录制语音格式的问题,这些需要跨平台我们可能需要使用双方平台都支持的格式,或者执行编码转换 解决方式如下: wa ...

  7. [python学习篇][书籍学习][python standrad library][内置类型]对象测试真值,布尔值操作, 比较操作

    几乎所有对象都可以比较.测试真值.转换为字符串(其实就是用repr()函数,或略有差异的str()函数来转换) 1 对象是否为真 任何对象都可以测试真值,用于if或while的条件或下面布尔运算的操作 ...

  8. HDU——2064汉诺塔III

    汉诺塔III Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. 刷题总结——pole(uva 1638 dp)

    题目: 题解: 这道题很妙的一点是很好地利用了最矮的杆子除了放两侧以外对观察数是没有影响的性质·· 考虑n-1个杆子与n个杆子··我们可以把n个杆子的排列看成n-1个杆子的长度加1按原来的排列顺序·· ...

  10. 如何发布自己的服务---zookeeper

    人肉告知的方式:如果你发现你的服务一台机器不够,要再添加一台,这个时候就要告诉调用者我现在有两个ip了,你们要轮询调用来实现负载均衡:调用者咬咬牙改了,结果某天一台机器挂了,调用者发现服务有一半不可用 ...