DBUtils工具
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工具的更多相关文章
- Java学习之DBUtils工具的学习
简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影 ...
- 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...
- 模拟实现 DBUtils 工具 , 技术原理浅析
申明:本文采用自己 C3P0 连接池工具进行测试 自定义的 JDBCUtils 可以获取 Connection: package com.test.utils; import java.sql.Con ...
- Java学习笔记49(DBUtils工具类二)
上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...
- Java基础-DButils工具类(QueryRunner)详解
Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...
- 30_java之DButils工具类
01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...
- DBUtils工具类的使用
DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ...
- DBUtils工具类和DBCP连接池
今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...
- java使用dbutils工具类实现小程序 管家婆记账软件
1.所需创建的包和 jar包 2.创建表结构 #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...
随机推荐
- OpenStack 存储服务 Cinder存储节点部署NFS(十七)
Cinder存储节点部署 1.安装软件包 yum install -y nfs-utils rpcbind 提示:早期版本安装portmap nfs-utils :包括基本的NFS命令与监控程序 rp ...
- Java基础-SSM之Spring MVC入门篇
Java基础-SSM之Spring MVC入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spring MVC简介 1>.什么是Spring MVC 答:Sprin ...
- 函数和常用模块【day04】:内置函数分类总结(十一)
重点掌握 字符串格式化format() 字符串格式化百分号 判断 转换 数据类型 帮助信息 map和filter()函数 局部变量全局变量 计算内置函数 常用内置函数(其他) 后续会讲 不常用
- spring cloud微服务架构 服务提供者和服务消费者
服务提供者和服务消费者 下面这张表格,简单描述了服务提供者/消费者是什么: | 名词 | 概念 | | ----- | ----------------------- | | 服务提供者 | 服务 ...
- yearProgress.vue
<template> <div class="progressbar"> <el-progress :text-inside="true&q ...
- 前端 ajax 改写登录界面
SSM 整合项目开发到一个阶段,想慢慢地把前台框架等技术引入进来 突然碰到一个困惑好久的问题: ajax 替换原本 form 表单 post 提交登录: 一直 404 错误,心塞.... 最后发现原来 ...
- Zookeeper笔记之命令行操作
$ZOOKEEPER_HOME/bin下的zkCli.sh进入命令行界面,使用help可查看支持的所有命令: 一.节点相关操作 create [-s] [-e] path data acl creat ...
- 以python代码解释fork系统调用
import os print('Process (%s) start...' % os.getpid()) # Only works on Unix/Linux/Mac: pid = os.fork ...
- Python内置模块与标准库
Python内置模块就是标准库(模块)吗?或者说Python的自带string模块是内置模块吗? 答案是:string不是内置模块,它是标准库.也就是说Python内置模块和标准库并不是同一种东西. ...
- 【Python】CVE-2017-10271批量自查POC(Weblogic RCE)
1.说明 看到大家对weblogic漏洞这么热衷,于是也看看这个漏洞的测试方式. 找了几个安全研究员的博客分析,经过几天的摸索大体清楚漏洞由XMLDecoder的反序列化产生. 漏洞最早4月份被发现, ...