一、DBUtils介绍  apache

什么是dbutils,它的作用

DBUtils是java编程中的数据库操作实用工具,小巧简单实用。

用前导包!!!DBUtils包!!!

二、DBUtils的三个核心对象

> QueryRunner类

>ResultSetHandler接口

> DBUtils类

QueryRunner类

QueryRunner中提供对sql语句操作的API.

它主要有三个方法

query() 用于执行select

update() 用于执行insert update delete

batch() 批处理

ResultSetHandler接口

用于定义select操作后,怎样封装结果集.

DbUtils类

它就是一个工具类,定义了关闭资源与事务处理的方法

三、QueryRunner对象

1.1 构造函数:

> new QueryRunner(); 它的事务可以手动控制。

也就是说此对象调用的方法(如:query、update、batrch)参数中要有Connection对象。

> new QueryRunner(DataSource ds); 它的事务是自动控制的。一个sql一个事务。
              此对象调用的方法(如:query、update、batrch)参数中无需Connection对象。

1.2 使用案例

private void doQueryAll() {

//ArrayHandler

//       QueryRunner queryRunner = new QueryRunner(UtilC3P0.getDataSource());

//        try {

//           Object[] objects = queryRunner.query("select * from user", newArrayHandler());

//            for(Object object : objects) {

//               System.out.println("object = " + object);

//

//            }

//        } catch(SQLException e) {

//           e.printStackTrace();

//        }

//--------------------------------------------------------------------------------------------------------

//ArrayListHandler

//       QueryRunner queryRunner = new QueryRunner(UtilC3P0.getDataSource());

//        try {

//           List<Object[]> list = queryRunner.query("select * fromuser", new ArrayListHandler());

//            for(Object[] objects : list) {

//               for (Object object : objects) {

//                   System.out.print(object+"\t");

//                }

//               System.out.println();

//

//            }

//        } catch (SQLException e) {

//           e.printStackTrace();

//        }

//--------------------------------------------------------------------------------------------------------

//ColumnListHandler

//       QueryRunner queryRunner = new QueryRunner(UtilC3P0.getDataSource());

//

//        try {

//           List<Object> list = queryRunner.query("select * fromuser", new ColumnListHandler(1));

//            for(Object o : list) {

//               System.out.println(o);

//

//            }

//        } catch(SQLException e) {

//           e.printStackTrace();

//        }

//--------------------------------------------------------------------------------------------------------

//KeyedHandler

//大map的key,是一行数据的一个标识,这个标识取当前行数据的某一列值

//小map就是当前行的数据  ,以键值对形式封装

//       QueryRunner queryRunner = new QueryRunner(UtilC3P0.getDataSource());

//        try {

//           Map<Object, Map<String, Object>> map =queryRunner.query("select * from user", new KeyedHandler(1));

//           Set<Object> objects = map.keySet();

//            for(Object object : objects) {

//               System.out.println("key "+object);

//               Map<String, Object> stringObjectMap = map.get(object);

//               System.out.println("value: "+stringObjectMap);

//            }

//

//        } catch(SQLException e) {

//           e.printStackTrace();

//        }

//--------------------------------------------------------------------------------------------------------

//常用1-----ScalarHandler查询某行某列数据

//       QueryRunner queryRunner = new QueryRunner(UtilC3P0.getDataSource());

//        try {

//           Object o = queryRunner.query("select money from user", newScalarHandler(1));

//           System.out.println(o);

//        } catch(SQLException e) {

//           e.printStackTrace();

//        }

//--------------------------------------------------------------------------------------------------------

//常用2-----BeanHandler  查询一行数据(一个对象)

//       QueryRunner queryRunner = new QueryRunner(UtilC3P0.getDataSource());

//        try {

//            Useruser = queryRunner.query("select * from user whereusername='dahuang1'", new BeanHandler<User>(User.class));

//            System.out.println(user);

//        } catch(SQLException e) {

//           e.printStackTrace();

//        }

//--------------------------------------------------------------------------------------------------------

//常用3-----BeanListHandler  查询多行数据(一个对象集合)

QueryRunnerqueryRunner = new QueryRunner(UtilC3P0.getDataSource());

try {

List<User> users = queryRunner.query("select * from userwhere money>?", new BeanListHandler<User>(User.class),50);

System.out.println(users);

} catch(SQLException e) {

e.printStackTrace();

}

}

//更新操作

private voiddoUpdate() {

QueryRunnerqueryRunner = new QueryRunner(UtilC3P0.getDataSource());

try {

queryRunner.update("update user set money=? where username=?", 99999, "dahuang1");

} catch(SQLException e) {

e.printStackTrace();

}

}

//删除操作

private voiddoDelete1() {

QueryRunnerqueryRunner = new QueryRunner(UtilC3P0.getDataSource());

try {

queryRunner.update("delete from user where username=?","hehedada");

} catch(SQLException e) {

e.printStackTrace();

}

}

//插入操作

private voiddoInsert() {

//       QueryRunner queryRunner=new QueryRunner(UtilC3P0.getDataSource());

//        try {

//           queryRunner.update("insert into user values(?,?,?,?)","hehedada","123456","nan",123.45);

//        } catch(SQLException e) {

//           e.printStackTrace();

//        }

QueryRunnerqueryRunner = new QueryRunner();

Connectionconnection = UtilC3P0.openConn();

try {

queryRunner.update(connection, "insert into uservalues(?,?,?,?)", "hehedada22", "123456","nan", 123.45);

} catch(SQLException e) {

e.printStackTrace();

} finally {

try {

connection.close();

} catch(SQLException e) {

e.printStackTrace();

}

}

}

1.3 批处理操作---batch

QueryRunner queryRunner=newQueryRunner(UtilC3P0.getDataSource());

Object[][] objects=new Object[100][];

for (int i = 0; i < objects.length;i++) {

objects[i]=new Object[]{"大黄"+i,"123456"+i};

}

try {

queryRunner.batch("INSERT  INTO user(username,userpwd) VALUES(?,?)",objects);

} catch (SQLException e) {

e.printStackTrace();

}

四、ResultSetHandler接口

ResultSetHandler下的所有结果处理器

1.      ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]

QueryRunnerqr = new QueryRunner(C3P0Util.getDataSource());

Object[]arr  = qr.query("select * fromusers", new ArrayHandler());

for(Object o : arr) {

System.out.println(o);

}

2.ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中

QueryRunnerqr = new QueryRunner(C3P0Util.getDataSource());

List<Object[]>query = qr.query("select * from users", new ArrayListHandler());

for(Object[] os : query) {

for(Object o : os) {

System.out.println(o);

}

System.out.println("--------------");

}

3.ColumnListHandler:取某一列的数据。封装到List中。

QueryRunnerqr = new QueryRunner(C3P0Util.getDataSource());

List<Object>list = qr.query("select username,password from users", newColumnListHandler(1));

for(Object o : list) {

System.out.println(o);

}

4.KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。

QueryRunnerqr = new QueryRunner(C3P0Util.getDataSource());

//大Map的key是表中的某列数据,小Map中的key是表的列名,所以大Map的key是Object类型,小Map的key是String类型

Map<Object,Map<String,Object>>map = qr.query("select * from users", new KeyedHandler(1));

for(Map.Entry<Object, Map<String,Object>> m : map.entrySet()) {

System.out.println(m.getKey());//大Map中key值就是id列的值

for(Map.Entry<String, Object> mm : m.getValue().entrySet()) {

System.out.println(mm.getKey()+"\t"+mm.getValue());//取出小Map中的列名和列值

}

System.out.println("---------------------");

}

5.MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中

QueryRunner qr = newQueryRunner(C3P0Util.getDataSource());

Map<String,Object>map = qr.query("select * from users where id=?", newMapHandler(),20);

for(Map.Entry<String, Object> m : map.entrySet()) {

System.out.println(m.getKey()+"\t"+m.getValue());

}

6.MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中

QueryRunner qr = newQueryRunner(C3P0Util.getDataSource());

List<Map<String,Object>>list = qr.query("select * from users", new MapListHandler());

for(Map<String, Object> map : list) {

for(Map.Entry<String, Object> m : map.entrySet()) {

System.out.println(m.getKey()+"\t"+m.getValue());

}

System.out.println("---------------");

}

7.ScalarHandler:适合取单行单列数据(常用)

QueryRunner qr = newQueryRunner(C3P0Util.getDataSource());

Objecto = qr.query("select count(*) from users", new ScalarHandler(1));

System.out.println(o.getClass().getName());

8.BeanHandler 返回我们所需要的实体(常用)

QueryRunnerqr = new QueryRunner(C3P0Util.getDataSource());

Useruser = qr.query("select * from users where id=?", newBeanHandler<User>(User.class),1);

System.out.println(user);

9.BeanListHandler 返回一组实体(常用)

QueryRunnerqr = new QueryRunner(C3P0Util.getDataSource());

List<User>list = qr.query("select * from users where id=?", newBeanListHandler<User>(User.class),1);

System.out.println(list.size());

JavaWeb之DButils整理的更多相关文章

  1. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  2. 【转载】JavaWeb之DBUtils QueryRunner类对数据表的增、删、查(8种结果集处理方式)、改操作

    一.使用QueryRunner类,实现对数据表的 insert delete update package com.shuhuadream.queryrunner; import java.sql.C ...

  3. [JavaWeb]关于DBUtils中QueryRunner的一些解读.

    前言:[本文属于原创分享文章, 转载请注明出处, 谢谢.]前面已经有文章说了DBUtils的一些特性, 这里再来详细说下QueryRunner的一些内部实现, 写的有错误的地方还恳请大家指出. Que ...

  4. JavaWeb之DBUtils

    一.什么是DBUtils及作用 DBUtils是apache公司写的.DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可以 ...

  5. 【JavaWeb】DbUtils入门之QueryRunner

    DbUtils简介 根据官网的介绍,DbUtils是一种 JDBC Utility Component (翻译过来大概就是:JDBC实用部件),故名思意,和数据库操作有关 官网上的简介也称之为 JDB ...

  6. JavaWeb基础—dbutils的简单入门

    简明入门教程,参考:https://www.cnblogs.com/CQY1183344265/p/5854418.html 进行此章节之前,介绍一个JdbcUtils的再次的简单封装 (例如后面需要 ...

  7. [JavaWeb]关于DBUtils中QueryRunner的一些解读(转)

    QueryRunner类 QueryRunner中提供对sql语句操作的API它主要有三个方法 query() 用于执行select update() 用于执行insert/update/delete ...

  8. Java-WEB开发常用方法整理

    /** * 此类中收集Java编程中WEB开发常用到的一些工具. * 为避免生成此类的实例,构造方法被申明为private类型的. * @author */ import java.io.IOExce ...

  9. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

随机推荐

  1. harris角点检测的简要总结

    目录 1. 概述相关 2. 原理详解 1) 算法思想 2) 数学模型 3) 优化推导 3. 具体实现 1) 详细步骤 2) 最终实现 4. 参考文献 1. 概述相关 harris角点检测是一种特征提取 ...

  2. (三) Keras Mnist分类程序以及改用交叉熵对比

    视频学习来源 https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553 笔记 Mnist分 ...

  3. 碰到了通过Movie显示gif图片,有部分图片的duration为0导致gif只显示第一帧

    解决办法,改为使用android-gif-drawable.jar来显示gif图片(需要配合com.android.support:support-v4:18.0.0使用) GifImageView ...

  4. 深圳市共创力咨询CEO杨学明的最新演讲:互联网模式下的企业创新管理

    2018年11月14日, 深圳市共创力咨询董事长.深圳市汇成研发管理咨询公司董事长杨学明先生受邀参加由深圳图书馆主办,深圳手讯视频承办的“倾听行业之声”2018第二届世界CED智慧大会,此次分享的主题 ...

  5. SQL Server数据库————增删改查

    --增删改查--增 insert into 表名(列名) value(值列表) --删 delect from 表名 where 条件 --改 update 表名 set 列名=值1,列名2=值2 w ...

  6. 剑指offer:调整数组顺序使奇数位于偶数前面

    题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...

  7. 《Python神经网络编程》的读书笔记

    文章提纲 全书总评 读书笔记 C01.神经网络如何工作? C02.使用Python进行DIY C03.开拓思维 附录A.微积分简介 附录B.树莓派 全书总评 书本印刷质量:4星.纸张是米黄色,可以保护 ...

  8. Why Ambari is setting the security protocol of the kafka to PLAINTEXTSASL instead of SASL_PLAINTEXT?

    首页 / Data Ingestion & Streaming / Why Ambari is setting the security protocol of the kafka to PL ...

  9. C++一些基本数据结构:字面常量、符号常量、枚举常量

    常量:C++包括两种常量,字面常量和符号常量. 字面常量:指的是直接输入到程序中的值 比如:in myAge=26: myAge是一个int类型变量,而26是一个字面常量. 符号常量:指的是用名称表示 ...

  10. 第二章 Python基本图形绘制

    2.1 深入理解Python语言 Python语言是通用语言 Python语言是脚本语言 Python语言是开源语言 Python语言是跨平台语言 Python语言是多模型语言 Python的特点与优 ...