Java实战之04JavaWeb-06DBUtils
一、DBUtils
1.DBUtils的简介
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
2.DBUtils中的API的概要介绍
QueryRunner类:sql操作的核心类 这个对象内部封装着操作数据的方法
ResultSetHandler接口:代表结果集到实体的映射封装的功能
为什么是接口:具体封装的规则不知道 要根据实体业务进行自行操作
DButils类:主要是关于数据库的关闭 事务的提交相关的方法
3.QueryRunner的API详解
注意:在使用DBUtils之前 导入的jar包
1)数据库驱动
2)连接池的jar
3)DBUtils的jar
(1)怎样创建QueryRunner
有两种方式可以创建QueryRunner
第一种无参:new QueryRunner();
一般情况下 结合事务操作一起使用
第二种有参:new QueryRunner(DataSource);
一般情况下 不需要事务控制的时候使用
注意:程序中操作sql时 必须得有Connection对象,有数据源参数的构造方法会自动从数据源中获得一个Connection对象操作数据库。无参的构造方法在创建QueryRunner时没有提供Connection的对象信息,在指定操作sql的方法时也得传入Connection。
QueryRunner中的方法
batch
update
query
(2)更新数据的操作(单条sql执行)
update操作:
update方法有三个参数 是通过这三个参数的组合 形成多个方法
Connection:数据库的连接对象 与无参的new QueryRunner()一起使用
sql:要执行sql语句 是必须有的
params:代笔占位符的实际的参数
通过上述参数可以组成哪些方法
update(Connection,sql,params);
update(Connection,sql);
update(sql,params);
update(sql);
@Test
public void test1() throws SQLException{
//需求:修改products表中的id=100的商品的category为 生活
//1、创建QueryRunner
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
//2、执行sql
String sql = "update products set category=? where id=?";
int update = runner.update(sql, "生活","100");
System.out.println(update);
}
(3)更新数据的操(批量sql执行)
batch操作---同时执行sql结构相同的多条语句
参数:
Connection:数据库的连接对象 与无参的new QueryRunner()一起使用
sql:要执行sql语句 是必须有的
params:二维数组
一维代表是指定的sql
二维代表sql中的占位符的实际参数
例如:
sql:insert into products values(?,?,?);
param:
{
{500,ios入门,15},
{600,C#入门,28},
{700,ruby入门,45},
{800,hadoop入门,99}
}
insert语句执行几次:4次 每一次执行3个参数
需求:向products表中批量插入2条数据
//1、创建QueryRunner对象
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
//2、执行sql
String sql = "insert into products values(?,?,?,?,?,?,?)";
//Object[][] params = new Object[2][7];
//params[0][0]="500";
Object[][] params = {
{"500","ruby入门",89,"感性",800,"bookcover/105.jpg","好书啊好书"},
{"600","hadoop入门",89,"感性",800,"bookcover/106.jpg","好书啊好书"}
};
int[] batch = runner.batch(sql, params);
//{1,1}
for(int i:batch){
System.out.println(i);
}
(4)查询的操作query
query方法执行select语句
参数:
Connection:数据库的连接对象 与无参的new QueryRunner()一起使用
sql:要执行sql语句 是必须有的
params:代笔占位符的实际的参数
ResultSetHandelr:结果集封装的功能
@Test
public void test1() throws SQLException{
//1、创建QueryRunner
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
//2、执行sql语句
String sql = "select * from products";
List<Product> query = runner.query(sql, new ResultSetHandler<List<Product>>() {
@Override
public List<Product> handle(ResultSet rs) throws SQLException {
//写自己的封装的逻辑
List<Product> list = new ArrayList<Product>();
while(rs.next()){
Product pro = new Product();
pro.setId(rs.getString("id"));
pro.setName(rs.getString("name"));
pro.setCategory(rs.getString("category"));
pro.setDescription(rs.getString("description"));
pro.setImgurl(rs.getString("imgurl"));
pro.setPnum(rs.getInt("pnum"));
pro.setPrice(rs.getDouble("price"));
list.add(pro);
}
return list;
} }); System.out.println(query);
}
二、ResultSetHandler接口的实现类
BeanListHandler:返回是List<T>
BeanHandler:返回的是T
MapListHandler:返回是List<Map<String,Object>>
MapHandler:返回是Map<String,Object>
ScalarHandler:返回的是一个object获得的是一个值 是查出的虚拟表的左上角的 值,常用在聚合函数查询中
---------------------------------------------------------------
ArrayListHandler:List<Object[]>
ArrayHandler:Object[]
ColumnListHandler:List<Object> 查询的是结构的某一列的数据集合
KeyedHandler:返回值Map<Object,Map<String,Object>>
{
200={id=200, category=生活, price=78.0, pnum=120, description=好书一本, name=android入门经典, imgurl=bookcover/102.jpg},
100={id=100, category=生活, price=88.0, pnum=100, description=好书一本, name=java入门经典, imgurl=bookcover/101.jpg}
}
DbUtils工具类:工具类,包括事务的提交,回滚和资源的关闭的工具方法,使用不多
Java实战之04JavaWeb-06DBUtils的更多相关文章
- 「小程序JAVA实战」springboot的后台搭建(31)
转自:https://idig8.com/2018/08/29/xiaochengxujavashizhanspringbootdehoutaidajian31/ 根据下面的图,我们来建立下对应的sp ...
- Java实战:教你如何进行数据库分库分表
摘要:本文通过实际案例,说明如何按日期来对订单数据进行水平分库和分表,实现数据的分布式查询和操作. 本文分享自华为云社区<数据库分库分表Java实战经验总结 丨[绽放吧!数据库]>,作者: ...
- java实战之解析xml
在java中解析xml有现成的包提供方法,常用的有四类:Dom,JDom,Sax以及Dom4j.其中前者是java中自带的,后三者需要大家从开源诸如sourceforge这样的网站下载jar包,然后在 ...
- Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目
一.前言 如果还不了解剧情,请返回第3集的剧情 Java归去来第3集:Eclipse中给动态模块升级 二.在Eclipse中创建Maven类型的SSM项目 2.1:SSM简介 SSM ...
- Lucene之Java实战
1.导包 2.索引的创建 2.1首先,我们需要定义一个词法分析器. Analyzer analyzer = new IKAnalyzer();//官方推荐 Analyzer analyzer = ne ...
- 【Java实战】源码解析Java SPI(Service Provider Interface )机制原理
一.背景知识 在阅读开源框架源码时,发现许多框架都支持SPI(Service Provider Interface ),前面有篇文章JDBC对Driver的加载时应用了SPI,参考[Hibernate ...
- 添物零基础到大型全栈架构师 Java实战及解析(实战篇)- 概述
实战篇是在基础之上,进一步提升的内容.通过实战篇可以深入理解Java相关框架和库的使用,能够独立开发小模块,或者按照架构师的指导进行代码编写和完善. 主要讲解核心框架和库的使用和使用场景介绍.通过 ...
- Zookeeper API for JAVA实战与应用
package com.zookeeper.watcher; import java.util.List; import java.util.concurrent.CountDownLatch; im ...
- Java实战equals()与hashCode()
一.equals()方法详解 equals()方法在object类中定义如下: 代码 public boolean equals(Object obj) { return (this == obj); ...
- JAVA 实战练习
1.判断变量是否为奇数偶数. package com.JAVA; import java.util.Scanner; public class text { public static void ma ...
随机推荐
- Stage3D学习笔记(一):3D术语简介
网格(Mesh) 3D中,所有可见的模型都被称作网格.网格是由3DMax等建模软件制作,定义了一个3D物体的形状.一个网格是由多个多边形组成的. 多边形(Polygon) 一个多边形是组成网格的一个最 ...
- jeewx的使用_01 接入和验证
jeewx是java语言的用于开发微信公共平台的一个框架,有人说很臃肿,但个人感觉还不错,仁者见仁智者见智吧, 下面简单介绍工作原理: 1.下载 要使用jeewx需要先下载其源码 jeewx介绍:ht ...
- Objective-C中的Block(闭包) (轉載)
来源: 伯乐在线 - 青玉伏案 链接:http://ios.jobbole.com/83229/ 学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西.学过 ...
- Mac窗口管理管理软件SizeUp
一.SizeUp 是一款 Mac窗口管理管理软件.借助SizeUp,可以快速变化窗口大小(最大化.最小化),可以快速切换窗口的不同位置. 尤其在双显示器,更是扮演者方便.高效.好用的角色,提供了快速切 ...
- CentOS 6.5安装TortoiseSVN svn client
TortoiseSVN: TortoiseSVN 是 Subversion 版本号控制系统的一个免费开源client,能够超越时间的管理文件和文件夹. 文件保存在中央版本号库,除了能记住文件和文件夹的 ...
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析
作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083 一. 相关方法简单介绍 1. 状态保存方法演示 ...
- CentOS安装Nginx安装详解
一.准备工作,安装依赖包,缺一不可!(推荐先用命令查看自己是否已经安装一下软件,确认没有再安装) --------------------------------------------------- ...
- ASC(1)G(上升时间最长的序列)
G - Beautiful People Time Limit: 10000/5000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Other ...
- Linux中的终端、控制台、tty、pty等概念
参考:http://news.newhua.com/news1/program_language/2010/623/10623141048745773199BCF0CFH6AKB9930IGCFKHB ...
- php验证输入字符串中含有非法字符
$pattern = "/(&|"|<|>|')+/"; preg_match($pattern, $media_name, $matches); ...