使用dbutils
环境准备:
包结构:
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的更多相关文章
- dbutils基本使用
dbutils的查询,主要用到的是query方法,增加,修改和删除都是update方法,update方法就不讲了 只要创建ResultSetHandler接口不同的实现类对象就可以得到想要的查询结果, ...
- BenUtils组件和DbUtils组件
BenUtils组件和DbUtils组件 [TOC] 1.BenUtils组件 1.1.简介 程序中对javabean的操作很频繁,所有Apache提供了一套开源api,方便javabean的操作!即 ...
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
- <十六>JDBC_使用 DBUtils 编写通用的DAO
接口 : DAO<T>.java import java.sql.Connection;import java.sql.SQLException;import java.util.List ...
- <十五>JDBC_使用 DBUtils 进行更新、查询操作
详解待续... DBUtilsTest.java import java.sql.Connection;import java.sql.Date;import java.sql.ResultSet;i ...
- DBUtils 笔记
一.DBUtils介绍 apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可 ...
- python DBUtils.PooledDB 中 maxcached 和 maxconnections
PooledDB 有这么几个参数 mincached : the initial number of idle connections in the pool (the default of 0 me ...
- 【Java EE 学习 17 上】【dbutils和回调函数】
一.dbutils的核心就是回调函数,可以说如果没有回调函数的思想,dbutils是不可能被开发出来的. 对于dbutils中的QuryRunner类,向该类的query方法提供不同的参数,可以得到不 ...
- 【Java EE 学习 16 下】【dbutils的使用方法】
一.为什么要使用dbutils 使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高 二.dbutils下载地址 http://commons.apache.org/proper/ ...
- DBUtils
DBUtils中核心对象 > QueryRunner类 它提供了操作数据增删改查的方法 query() 执行select语句的 update() 执行insert update delete 语 ...
随机推荐
- ATX agent+UIautomation2 自动化测试介绍
纯搬运贴,内容几乎来源于作者的几篇介绍文章,这里做了整合 目前ATX+UIautomator2 处于自动化界的浪口风尖,现在有幸终于有时间对ATX进行了粗浅的了解 为什么要用ATX ATX+UIaut ...
- Vue cli2.0 项目中使用Monaco Editor编辑器
monaco-editor 是微软出的一条开源web在线编辑器支持多种语言,代码高亮,代码提示等功能,与Visual Studio Code 功能几乎相同. 在项目中可能会用带代码编辑功能,或者展示代 ...
- [HAOI2015]树上染色(树上dp)
[HAOI2015]树上染色 这种要算点对之间路径的长度和的题,难以统计每个点的贡献.这个时候一般考虑算每一条边贡献了哪些点对. 知道这个套路以后,那么这题就很好做了. 状态:设\(dp[u][i]\ ...
- python之“装饰器”
在python里装饰器 其定义:装饰器就是一个函数,用来装饰其他函数,就是给其他函数添加功能. 装饰器有两个特点: 1.装饰器不修改被装饰函数的源码: 2.装饰器不锈钢被装饰函数的调用方式. 在编程中 ...
- AR+工业,带来哪些革变呢?
随着技术的普及相信大家对VR和AR也略有所知,尤其是AR增强现实技术,已经成为许多科技巨头企业争相扩疆的热土,目前来说,AR技术最广泛的应用是工业领域,已经显示出巨大的价值. ...
- 【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[1]:验证模型
CKB 脚本编程简介[1]: 验证模型 本文作者:Xuejie 原文链接:Introduction to CKB Script Programming 1: Validation Model 本文译者 ...
- 【码上开心】Windows环境mysql数据库使用(二)skip-grant-tables 与用户名密码修改
skip-grant-tables #跳过数据库权限验证 我们安装MySql 设置my.ini配置文件的时候,常常会在my.ini中添加 skip-grant-tables ,这时接数据库可以使用任意 ...
- HTML5实时语音通话聊天,MP3压缩传输3KB每秒
目录 一.把玩方法 二.技术特性 (1)数据传输 (2)音频采集和编码 (3)音频实时接收和播放 三.应用场景 自从Recorder H5 GitHub开源库优化后,对边录边转码成小语音片段文件实时上 ...
- MySQL之Xtrabackup的使用
一.Xtrabackup介绍 XtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Pe ...
- MySQL IN和EXISTS的效率问题,以及执行优化
网上可以查到很多这样的说法: 如果查询的两个表大小相当,那么用in和exists差别不大.如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 例如:表A(小表),表B ...