环境准备:

包结构:

mysql导出sql脚本:

//product
CREATE TABLE `product` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`description` varchar(20) DEFAULT NULL,
`create_date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
==============================
//user
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(10) DEFAULT NULL,
`password` varchar(10) DEFAULT NULL,
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

===============================

使用dbutils:

导入jar包:commons-dbutils-1.3.jar

测试:

//dbutils: jdbc 的工具类. 使用它可以更好的使用JDBC
@Test
public void testDbutilsUpdate(){
//1. 创建 QueryRunner 的实例
QueryRunner queryRunner = new QueryRunner(); //2. 调用其方法进行 CRUD 操作: create read update delete
//2.1 update(Connection, sql, args); 可以进行 CREATE、UPDATE 和 DELETE 操作
Connection connection = null; try {
connection = JdbcUtils.getConnection();
String sql="insert into product(name,description,create_date) values(?,?,?)";
//String sql="update product set name=?,description=?,create_date=? where id=?";
//String sql = "delete from product where id=?"; queryRunner.update(connection, sql, "PRO 5","MEIZU", new Date());
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.close(connection);
}
}
=======================================
@Test
public void testDbUtilsQuery(){
//1. 创建 QueryRunner 的实例
QueryRunner queryRunner = new QueryRunner(); //2. 进行READ操作: 调用QueryRunne的query()方法
Connection connection = null; try {
connection = JdbcUtils.getConnection();
String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
+ "FROM product"; //选择合适的 ResultSetHandler.
ResultSetHandler<List<Product>> rsh = new BeanListHandler(Product.class);
List<Product> products = queryRunner.query(connection, sql, rsh); System.out.println(products);
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.close(connection);
}
}
================================== @Test
public void testDbUtilsResultSetHandler(){
//1. 创建 QueryRunner 的实例
QueryRunner queryRunner = new QueryRunner(); //2.进行READ操作: 调用QueryRunne的query()方法
Connection connection = null; try {
connection = JdbcUtils.getConnection();
String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
+ "FROM product"; //具体返回什么样式的数据, 取决于传入的 ResultSetHandler 的类型.
//1. 若传入 ArrayListHandler, 则返回的是 数组类型的 List.
// ResultSetHandler rsh = new ArrayListHandler();
//2. 若传入 MapListHandler, 则返回的是 Map 类型的 List
ResultSetHandler rsh = new MapListHandler(); //选择合适的 ResultSetHandler.
List results = queryRunner.query(connection, sql, rsh);
for(Object object: results){
System.out.println(object);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.close(connection);
}
} =========================================
@Test
public void testDbUtilsResultHandler2(){
//1. 创建 QueryRunner 的实例
QueryRunner queryRunner = new QueryRunner(); //2.进行READ操作: 调用QueryRunne的query()方法
Connection connection = null; try {
connection = JdbcUtils.getConnection();
String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
+ "FROM product WHERE id = ?"; //具体返回什么样式的数据, 取决于传入的 ResultSetHandler 的类型.
ResultSetHandler rsh = new ArrayHandler(); //选择合适的 ResultSetHandler.
Object results = queryRunner.query(connection, sql, rsh, 1);
System.out.println(results);
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.close(connection);
}
}

小结:

1、 进行 UPDATE 操作(增、删、改): 调用 QueryRunner 的

public int update(Connection conn, String sql, Object… params) 方法即可.

2、进行 READ (查)操作: 调用 QueryRunner 的

public T query(Connection conn, String sql, ResultSetHandler rsh,

Object… params) 方法.

=================================

关于READ操作的关键点是:ResultSetHandler

它是结果集处理器: 可以把结果集转为需要的目标类型.

经典的实现:

BeanHandler: 适用于返回单条数据. 把结果集转为一个 JavaBean 对象返回

BeanListHandler: 适用于返回多条数据. 把结果集转为一个 JavaBean 的集合返回

MapHandler: 适用于返回单条数据. 把结果集转为一个 Map 对象返回.

MapListHandler: 适用于返回多条数据. 把结果集转为以个 Map 的 List 返回

==============

此部分结果集的处理还涉及到集合知识点,需要学习,未完待续!

使用dbutils的更多相关文章

  1. dbutils基本使用

    dbutils的查询,主要用到的是query方法,增加,修改和删除都是update方法,update方法就不讲了 只要创建ResultSetHandler接口不同的实现类对象就可以得到想要的查询结果, ...

  2. BenUtils组件和DbUtils组件

    BenUtils组件和DbUtils组件 [TOC] 1.BenUtils组件 1.1.简介 程序中对javabean的操作很频繁,所有Apache提供了一套开源api,方便javabean的操作!即 ...

  3. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  4. <十六>JDBC_使用 DBUtils 编写通用的DAO

    接口 : DAO<T>.java import java.sql.Connection;import java.sql.SQLException;import java.util.List ...

  5. <十五>JDBC_使用 DBUtils 进行更新、查询操作

    详解待续... DBUtilsTest.java import java.sql.Connection;import java.sql.Date;import java.sql.ResultSet;i ...

  6. DBUtils 笔记

    一.DBUtils介绍  apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可 ...

  7. python DBUtils.PooledDB 中 maxcached 和 maxconnections

    PooledDB 有这么几个参数 mincached : the initial number of idle connections in the pool (the default of 0 me ...

  8. 【Java EE 学习 17 上】【dbutils和回调函数】

    一.dbutils的核心就是回调函数,可以说如果没有回调函数的思想,dbutils是不可能被开发出来的. 对于dbutils中的QuryRunner类,向该类的query方法提供不同的参数,可以得到不 ...

  9. 【Java EE 学习 16 下】【dbutils的使用方法】

    一.为什么要使用dbutils 使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高 二.dbutils下载地址 http://commons.apache.org/proper/ ...

  10. DBUtils

    DBUtils中核心对象 > QueryRunner类 它提供了操作数据增删改查的方法 query() 执行select语句的 update() 执行insert update delete 语 ...

随机推荐

  1. 源码分析--dubbo服务端暴露

    服务暴露的入口方法是 ServiceBean 的 onApplicationEvent.onApplicationEvent 是一个事件响应方法,该方法会在收到 Spring 上下文刷新事件后执行服务 ...

  2. 网页如何设置favicon.ico

    1.首先制作ico图,并命名favicon.ico 2.将文件放在项目的根目录下

  3. 关于selenium自动化对窗口句柄的处理

    首先什么是句柄?句柄就是你点击一个页面,跳转了一个新的窗口.你要操作的元素可能在原窗口上,也有可能在新窗口上. 看下图句柄1 句柄2 由这2张图可知,url不一样,证明他们是处于不同的界面,我要操作的 ...

  4. 05_指针之New()函数的使用

    1.new函数是一个内置函数,表达式new(T)创建一个未命名的T类型变量,初始化为T类型的零值,并返回其地址(地址类型为*T)2.p:=new(int),q:=new(int)==>p!=q ...

  5. IDEA-Maven项目的jdk版本设置

    在 Intellij IDEA 中,我们需要设置 Settings 中的 Java Compiler 和 Project Structure 中的 Language Level 中的 jdk 版本为自 ...

  6. 转载-SpringBoot开发案例之整合日志管理

    转载:https://cloud.tencent.com/developer/article/1097579 有一种力量无人能抵挡,它永不言败生来倔强.有一种理想照亮了迷茫,在那写满荣耀的地方. 00 ...

  7. hihocoder #1608 : Jerry的奶酪(状压dp)

    题目链接:http://hihocoder.com/problemset/problem/1608 题解:就是一道简单的状压dp由于dfs过程中只需要几个点之间的转移所以只要预处理一下几个点就行. # ...

  8. codeforces 245 D. Restoring Table(位运算+思维)

    题目链接:http://codeforces.com/contest/245/problem/D 题意:给出一个矩阵b,b[i][j]=a[i]&a[j],b[i][i]=-1.然后求a[i] ...

  9. 一起MySQL时间戳精度引发的血案

    写在前面 最近工作中遇到两例mysql时间戳相关的问题,一个是mysql-connector-java和msyql的精度不一致导致数据查不到:另一例是应用服务器时区错误导致数据查询不到.通过这篇文章, ...

  10. http gzip压缩功能记录

    版权声明:本文为博主原创文章,转载请附上原文出处链接. 本文链接:https://www.cnblogs.com/shaoshuai95928/articles/Tomcat.html 最近在spri ...