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. python中文件操作的其他方法

    前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...

  2. MyEclipse访问MSSQL2008数据库

    首先到微软网站http://www.microsoft.com/zh-cn/download/details.aspx?id=21599下载sqljdbc_3.0.1301.101_chs.exe, ...

  3. ubuntu12.04安装teamviewer

    ubuntu 12.04 64位 下载地址:http://downloadap2.teamviewer.com/download/teamviewer_linux_x64.deb 下载之后,选中,右击 ...

  4. clr(Windows 运行时和公共语言运行时)

    Windows 运行时   编译器使用 COM 引用计数机制来确定对象是否不再使用并可以删除. 因为从 Windows 运行时接口派生的对象实际上是 COM 对象,所以这是可行的. 在创建或复制对象时 ...

  5. bzoj3262陌上花开 三维数点 cdq+树状数组

    大早上的做了一道三维数点一道五位数点,神清气爽! 先给一维排序,变成一个奇怪的动态的二维数点(相当于有一个扫描面扫过去,导致一系列的加点和询问) 然后cdq分治,再变回静态,考虑前半段对后半段的影响 ...

  6. LPSTR LPCSTR LPWSTR LPCWSTR区别

    LPSTR   一个32位的指向字符串的指针    LPCSTR   一个32位的指向字符串常量的指针    LPWSTR   一个32位的指向unicode字符串的指针    LPCWSTR   个 ...

  7. day01_12.字符串

    1.字符转义 在字符串中,出现一些比较特殊的字符,容易引起歧义 我们需要转义这些引起歧义的字符串 <?php $a = 'ab\\c'; //转义字符2个 \' \\ $b = 'ab\'c'; ...

  8. CF878D D. Magic Breeding bitset

    D. Magic Breeding time limit per test 4 seconds memory limit per test 1024 megabytes input standard ...

  9. CCF认证题 搜索题

    栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题. 栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能 ...

  10. UVa——1593Alignment of Code(string重定向+vector数组)

    UVA - 1593 Alignment of Code Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & ...