DBUtils工具

简介

是Apache旗下的产品。是对jdbc的简单封装。提供出通用的jdbc操作方法。简化开发者使用jdbc的成本。

常用的API说明

|- QueryRunner类: 主要进行jdbc的增删改查操作。

|-update(): 用于更新

|-query(): 用于查询

|- ResultSetHandler接口: 主要用于在查询操作中,封装结果集。ResultSet -> 对象

|-ArrayHandler类:把结果集的第一行记录封装成数组

|-ArrayListHandler类: 把结果集的每一行封装到对象数组中,每个对象数组放入List集合中。

|- BeanHandler类: 把结果集封装到一个javabean对象中

|-BeanListHandler类: 把结果集的每一行数据封装到一个javabean对象中,然后把javabean对象放入List集合中。

以上两个方法使用频率最高!!!

|- ScalarHandler类:  把结果集的第一行第一列的数据返回。通用用于聚合查询(例如,count,max,min,avg)

介绍完它的核心API,下面来演示一下它的使用步骤。

DBUtils的使用步骤

步骤一:导包

导入commons-dbutils-1.2.jar 包

步骤二:代码中使用它

利用DBUtils进行增删改工作

    @Test
public void test1()
{
//1.创建QueryRunner
//方式一:用一个DataSoutce对象作参数
ComboPooledDataSource pool = new ComboPooledDataSource();
QueryRunner qr = new QueryRunner(pool); try {
//执行SQL语句
qr.update("insert into students(id,name) values(?,?)",new Object[] {8,"JAX"});
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

下面来看看方式二:

    @Test
public void test2()
{
//1.创建QueryRunner
//方式二:用无参的方法
ComboPooledDataSource pool = new ComboPooledDataSource();
QueryRunner qr = new QueryRunner();
Connection conn = null; try {
conn = pool.getConnection();
//用指定的conn执行指定的SQL语句
qr.update(conn,"insert into students(id,name) values(85,'JinX')");
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
if(conn!=null)
{
try {
conn.close();//放回连接池
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

利用DBUtils进行查询工作

DBUtils最大的用处还是在于查询后把结果封装~下面来体现一下把

1.ArrayHandler:把查询结果的第一行返回一个对象数组。

    @Test
public void test3()
{
//1.创建QueryRunner
ComboPooledDataSource pool = new ComboPooledDataSource();
QueryRunner qr = new QueryRunner(pool); try {
//执行SQL语句,使用ArrayHandler
Object[] obj = (Object[]) qr.query("select * from students",new ArrayHandler()); for(int i = 0; i<obj.length;i++)
{
System.out.println(obj[i]);
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

2.ArrayListHandler:把查询的结果的每一行封装到一个数组中,然后把这些数组放到一个集合中返回。

@Test
public void test4()
{
//1.创建QueryRunner
ComboPooledDataSource pool = new ComboPooledDataSource();
QueryRunner qr = new QueryRunner(pool); try {
//执行SQL语句,使用ArrayListHandler()
List<Object[]> list = (List<Object[]>)qr.query("select * from students", new ArrayListHandler()); for(Object[] obj : list)
{
for(int i=0;i<obj.length;i++)
{
System.out.println(obj[i] + "\t");
}
} } catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

3.BeanHandler:把结果集的第一行记录返回一个javaBean对象

前提:结果集的字段名 和 javaBean的属性名保持一致。

    @Test
public void test5()
{
//1.创建QueryRunner
ComboPooledDataSource pool = new ComboPooledDataSource();
QueryRunner qr = new QueryRunner(pool); try {
//执行SQL语句,使用BeanHandler
Students s = (Students) qr.query("select * from students",new BeanHandler(Students.class)); System.out.println(s); } catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

4.BeanListHandler:把结果集的每一行封装成一个javaBean对象,然后把这些对象放入到一个List集合中返回。

前提:结果集的字段名 和 javaBean的属性名保持一致。

    @Test
public void test6()
{
//1.创建QueryRunner
ComboPooledDataSource pool = new ComboPooledDataSource();
QueryRunner qr = new QueryRunner(pool); try {
//执行SQL语句,使用BeanListHandler
List<Students> list = (List<Students>)qr.query("select * from students",new BeanListHandler(Students.class)); for(Students s : list)
{
System.out.println(s);
} } catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

5.scalarHandler:返回结果集第一行第一列的字段值。

常常被用于聚合查询。

    @Test
public void test7()
{
//1.创建QueryRunner
ComboPooledDataSource pool = new ComboPooledDataSource();
QueryRunner qr = new QueryRunner(pool); try {
//执行SQL语句,使用ArrayHandler
Object obj = (Object) qr.query("select count(*) from students",new ScalarHandler()); System.out.println(obj); } catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

6.自定义字段名转换handler

如果字段名 和 javaBean属性名,不一致,我们就要编写自己的一个handler,来实现封装时的字段名对应,下面就来演示一下如何编写自己的handler

    @Test
public void test8()
{
//1.创建QueryRunner
ComboPooledDataSource pool = new ComboPooledDataSource();
QueryRunner qr = new QueryRunner(pool); try {
//执行SQL语句,使用BeanHandler
Students2 s = (Students2) qr.query("select * from students",new MyStudentsHandler()); System.out.println(s); } catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
} //手动封装结果集
class MyStudentsHandler implements ResultSetHandler
{ @Override
public Object handle(ResultSet rs) throws SQLException {
while(rs.next())
{
//创建javaBean对象
Students2 s = new Students2();
s.setId(rs.getInt("sid"));//
s.setName(rs.getString("sname"));
return s;
}
return null;
}
}

上述就是DBUtils这个工具的一些用法,主要是用来封装结果集的对象~

DBUtils工具的更多相关文章

  1. Java学习之DBUtils工具的学习

    简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影 ...

  2. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用

    1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...

  3. 模拟实现 DBUtils 工具 , 技术原理浅析

    申明:本文采用自己 C3P0 连接池工具进行测试 自定义的 JDBCUtils 可以获取 Connection: package com.test.utils; import java.sql.Con ...

  4. Java学习笔记49(DBUtils工具类二)

    上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...

  5. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  6. 30_java之DButils工具类

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...

  7. DBUtils工具类的使用

    DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ...

  8. DBUtils工具类和DBCP连接池

    今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...

  9. java使用dbutils工具类实现小程序 管家婆记账软件

    1.所需创建的包和 jar包 2.创建表结构  #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...

随机推荐

  1. javascript函数以及作用域简介

    javascript函数以及作用域简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.基本函数 对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内 ...

  2. python教程1:Python基础之数据类型和变量、字符串和编码

    视频链接:http://www.bilibili.com/video/av10730372/ 我是在Linux下玩python的,Linux下默认安装python,直接打个pyhon3就好了,pyth ...

  3. Spark记录-Scala数组

    Scala提供了一种数据结构叫作数组,数组是一种存储了相同类型元素的固定大小顺序集合.数组用于存储数据集合,但将数组视为相同类型变量的集合通常更为有用. 可以声明一个数组变量,例如:numbers,使 ...

  4. POJ - 3020 Antenna Placement(最小覆盖路径)

    ---恢复内容开始--- https://vjudge.net/problem/POJ-3020 题意 *--代表城市,o--代表空地 给城市安装无线网,一个无线网最多可以覆盖两座城市,问覆盖所有城市 ...

  5. go语言学习之路(一)Hello World

    为什么要使用 Go 语言?Go 语言的优势在哪里? 1.部署简单. 2.并发性好. 3.良好的语言设计. 4.执行性能好. Go环境搭建 Golang下载 国外镜像  https://www.gola ...

  6. 一组数字,从1到n,从中减少了3个数,顺序打乱,放在n-3的数组里,找出丢失数字

    曾经看到有这样一个JS题:有一组数字,从1到n,从中减少了3个数,顺序也被打乱,放在一个n-3的数组里请找出丢失的数字,最好能有程序,最好算法比较快假设n=10000 下面我也来贴一个算法. func ...

  7. 高可用的MongoDB集群【转】

    刚接触MongoDB,就要用到它的集群,只能硬着头皮短时间去看文档和尝试自行搭建.迁移历史数据更是让人恼火,近100G的数据文件,导入.清理垃圾数据执行的速度蜗牛一样的慢.趁着这个时间,把这几天关于M ...

  8. 五、vue状态管理模式vuex

    一.vuex介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 即data中属性同时有一 ...

  9. C#获取特定进程CPU和内存使用率

    首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetCurrentProcess()方法来获取当前程序所对应的进程 ...

  10. $.ajax的一些总结

    1.$.ajaxSetup()函数来全局设置    $.ajaxSetup({      url: "/xmlhttp/",      global: false,      ty ...