一、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的更多相关文章

  1. 「小程序JAVA实战」springboot的后台搭建(31)

    转自:https://idig8.com/2018/08/29/xiaochengxujavashizhanspringbootdehoutaidajian31/ 根据下面的图,我们来建立下对应的sp ...

  2. Java实战:教你如何进行数据库分库分表

    摘要:本文通过实际案例,说明如何按日期来对订单数据进行水平分库和分表,实现数据的分布式查询和操作. 本文分享自华为云社区<数据库分库分表Java实战经验总结 丨[绽放吧!数据库]>,作者: ...

  3. java实战之解析xml

    在java中解析xml有现成的包提供方法,常用的有四类:Dom,JDom,Sax以及Dom4j.其中前者是java中自带的,后三者需要大家从开源诸如sourceforge这样的网站下载jar包,然后在 ...

  4. Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目

    一.前言 如果还不了解剧情,请返回第3集的剧情          Java归去来第3集:Eclipse中给动态模块升级 二.在Eclipse中创建Maven类型的SSM项目 2.1:SSM简介 SSM ...

  5. Lucene之Java实战

    1.导包 2.索引的创建 2.1首先,我们需要定义一个词法分析器. Analyzer analyzer = new IKAnalyzer();//官方推荐 Analyzer analyzer = ne ...

  6. 【Java实战】源码解析Java SPI(Service Provider Interface )机制原理

    一.背景知识 在阅读开源框架源码时,发现许多框架都支持SPI(Service Provider Interface ),前面有篇文章JDBC对Driver的加载时应用了SPI,参考[Hibernate ...

  7. 添物零基础到大型全栈架构师 Java实战及解析(实战篇)- 概述

    ​ 实战篇是在基础之上,进一步提升的内容.通过实战篇可以深入理解Java相关框架和库的使用,能够独立开发小模块,或者按照架构师的指导进行代码编写和完善. 主要讲解核心框架和库的使用和使用场景介绍.通过 ...

  8. Zookeeper API for JAVA实战与应用

    package com.zookeeper.watcher; import java.util.List; import java.util.concurrent.CountDownLatch; im ...

  9. Java实战equals()与hashCode()

    一.equals()方法详解 equals()方法在object类中定义如下: 代码 public boolean equals(Object obj) { return (this == obj); ...

  10. JAVA 实战练习

    1.判断变量是否为奇数偶数. package com.JAVA; import java.util.Scanner; public class text { public static void ma ...

随机推荐

  1. 如何创建一个有System用户权限的命令行

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何创建一个有System用户权限的命令行.

  2. 网站WAF的检测

    [wafw00f]: 项目地址: https://github.com/sandrogauci/wafw00f WAFW00F是识别和指纹Web应用防火墙(WAF)产品,其工作原理是首先通过发送一个正 ...

  3. 实例:ABAP Tree Control 使用与ALV Grid对象关联

    Tree Control 是最常用的Windows控件之一,在其他语言中成为"Tree View"等,ABAP的 Tree Contiol 能实现类似的功能. 本文主要介绍一下内容 ...

  4. Android Studio 编译不通过,报错“找不到org.apache.http

    如果你使用的 target sdk是23请在build.gradle加入 android{ useLibrary ‘org.apache.http.legacy‘ }

  5. 利用UIBezierPath实现一个带圆角的视图

    - (void)drawRect:(CGRect)rect { // draw a box with rounded corners to fill the view - UIBezierPath * ...

  6. .NET世界各成员之间的关系

    相信看到这篇文章的人,心中肯定有这样的想法:ODBC.OLEDB.ADO.ADO.NET貌似都是访问数据库的东东,那么他们之间有什么区别,又有什么联系呢?不要着急,待我慢慢道来. 先说ODBC,官方的 ...

  7. cocos2d-x读取xml(适用于cocos2d-x 2.0以上版本号)

    为了能在cocos2d-x的文本标签中显示中文,一个是转换文件编码格式,还有一种就是读取utf-8格式的xml文件.我选择了后者,其原因大家可以去搜索一下cocos2d-x显示中文,希望可以你给答案. ...

  8. python 源码解析

    http://blog.donews.com/lemur/archive/category/cpython%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90/

  9. careercup-C和C++ 13.8

    13.8 编写一个智能指针类.智能指针是一种数据类型,一般用模板实现,模拟指针行为的同时还提供自动垃圾回收机制.它会自动记录SmartPointer<T*>对象的引用计数,一旦T类型对象的 ...

  10. 文件I/O(不带缓冲)之I/O的效率

    程序清单3-3中的程序使用read和write函数复制文件.关于该程序应注意下列各点: 它从标准输入读,写至标准输出,这就假定在执行本程序之前,这些标准输入.输出已由shell安排好.确实,所有常用的 ...