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. 解决VMware虚拟机网络时长中断的问题

    1. 操作环境 VMware VMware® Workstation 14 Pro Windows Win7旗舰版 2. 操作过程   VMware虚拟机在使用一段时间后,经常会出现时常断网的情况,而 ...

  2. P2513 [HAOI2009]逆序对数列

    P2513 [HAOI2009]逆序对数列 题目描述 对于一个数列{ai},如果有iaj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数.那 ...

  3. sql查询结果存入DataTable,然后从DataTable取数据

    public static DataTable SqlConnectionInformation() { string connstr = ConfigurationManager.Connectio ...

  4. SHELL (3) —— 变量知识进阶和实践

    摘自:Oldboy Linux运维——SHELL编程实战 SHELL中特殊切重要的变量 位置变量 作用说明 $0 获取当前执行的Shell脚本的文件名,如果执行脚本包含了路径,那么就包括脚本路径 $n ...

  5. 何凯文每日一句打卡||DAY6

  6. [iOS问题归总]iPhone上传项目遇到的问题

    1. 在上传项目的时候,UpLoad App Store后弹出iTunes Store operation failed. 错误原因:你在ItunesConnect(https://itunescon ...

  7. git 学习小记之记住https方式推送密码

    昨天刚刚学了点git基础操作,但是不幸的是Git@OSC给出公告说尽量使用 https 进行操作.可是在用 https 进行 push 时,都需要输入帐号和密码. 各种百度谷歌之后在Git@OSC官网 ...

  8. 分布式监控工具Ganglia 介绍 与 集群部署.

    如果你目的很明确就是冲着标题来的,不爱看我唠叨,请直接进入第二个分割线之后的内容. 其实之前就是有做Swift监控平台的打算的,但是因为没什么硬性需求么,也不要紧的,就一直搁置了.最近实验室来了个大二 ...

  9. composer "Failed to decode zlib stream"

    dockerFile 中安装composer.... RUN curl -s -f -L -o /tmp/installer.php https://raw.githubusercontent.com ...

  10. 第12月第14天 sfml cmake

    1. cd Desktop/mycode/ ls mkdir sfml03 cd sfml03 ls vi main.cpp vi config.h vi CMakeLists.txt ls pwd ...