使用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中安全的单例与不安全的单例
java中安全的单例与不安全的单例 1.内部静态类(安全的) public class Singleton { private static class SingletonHolder{ privat ...
- LInux系统@安装CentOS7虚拟机
安装Centos7虚拟机 1.打开VMware,点击创建新的虚拟机(至关重要) 2.选择自定义配置,点击下一步 3.选择虚拟机硬件兼容性<Workstation 12.0>,点击下一步 4 ...
- ASP.NET Core 2.2 : 二十六. 应用JWT进行用户认证
本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新方案(ASP.NET Core 系列目录) 一.什么是JWT? JWT(json web token ...
- HBase的安装和使用
文章作者:foochane 原文链接:https://foochane.cn/article/2019062801.html 1 Hbase基本介绍 Hbase是一个分布式数据库,可以提供数据的实时 ...
- PHP识别简单的图片上面的数字(可扩展)
1.场景 最近在学习图片处理,就是特意把数字生成一个图片,然后再用程序去识别图片的数字.这就有了一下的学习过程. 2.原理分析 2.1 首先是将图片像素化,二值化,然后和字模去对比(需要相对于配置字模 ...
- js的真值与假值
假值 结果为 false 的值称为 假值.例如,空字符串 "" 为假值,因为在布尔表达式中,"" 等于 false. false == 0返回:true fal ...
- spss分析存在共性线后,接下来是怎么分析?
在进行线性回归分析时,容易出现自变量(解释变量)之间彼此相关,这种情况被称作多重共线性问题. 适度的多重共线性不成问题,但当出现严重共线性问题时,可能导致分析结果不稳定,出现回归系数的符号与实际情况完 ...
- URAL-1627-Join 生成树计数
传送门:https://vjudge.net/problem/URAL-1627 题意: 给定一个n*m的图,问图中“.”的点生成的最小生成树有多少个. 思路: 生成树的计数,需要用Kirchhoff ...
- CodeForces - 697C-Lorenzo Von Matterhorn(有点像LCA,原创
传送门: CodeForces - 697C 原创--原创--原创 第一次自己A了一道感觉有点难度的题: 题意:在一个类似于二叉树的图上,1 : u ,v,w 表示从u到v的所以路都加上w的费用: 2 ...
- CodeForces 1187G Gang Up 费用流
题解: 先按时间轴将一个点拆成100个点. 第一个点相当于第一秒, 第二个点相当于第二秒. 在这些点之间连边, 每1流量的费用为c. 再将图上的边也拆开. 将 u_i 向 v_i+1 建边. 将 v_ ...