使用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 语 ...
随机推荐
- 图灵学院Java架构师-VIP-【性能调优-Mysql索引数据结构详解与索引优化】
最近报名了图灵学院的架构专题的付费课程,没有赶上6月份开课,中途加入的.错过了多线程的直播课程,只能看录播了
- unity之加载场景
游戏中的Loading分为:静态Loading和动态Loading. 简单形象的做个比喻: 静态Loading可能就是一张背景图.而动态的Loading就是在读取的同时有一个东西在“转圈”. 1.静态 ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- Linux配置使用SSH Key登录并禁用root密码登录
Linux系统大多数都支持OpenSSH,生成公钥.私钥的最好用ssh-keygen命令,如果用putty自带的PUTTYGEN.EXE生成会不兼容OpenSSH,从而会导致登录时出现server r ...
- [python]print简单用法和读取用户输入
代码开发环境:Eclipse 1.打印字符串: print "Hello world!" myString = "Hello world!" print myS ...
- P2805 [NOI2009]植物大战僵尸 + 最大权闭合子图 X 拓扑排序
传送门:https://www.luogu.org/problemnew/show/P2805 题意 有一个n * m的地图,你可以操纵僵尸从地图的右边向左边走,走的一些地方是有能量值的,有些地方会被 ...
- Trace 2018徐州icpc网络赛 思维+二分
There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( xx , yy) ...
- bzoj 1588: [HNOI2002]营业额统计(splay入门)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题解:这题如果用普通的bst的话是可以过时间差不多4s左右如果用splay的话是14 ...
- CF - 1110F Nearest Leaf
题目传送门 题解: 先用题目给定的dfs方式得到dfs序,记录下出入的dfs序. 很明显可以得知的是,以u为根的子树的dfs序在 in[u] - out[u] 的范围之内. 将每个询问先全部存到对应的 ...
- 【Offer】[34] 【二叉树中和为某一值的路径】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径.  ...