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','开工资了'); ,,'现金', ...
随机推荐
- webpack实现“热更新”和“热加载”(webpack3.6新增)
之前的博文有提到怎么样去实现热更新,但是居然要用到另外一个node框架(express)而且新增了一个入口(entry)两个插件(plugin)来实现,大大提高了配置的复杂度,这样其实对使用webpa ...
- Oracle之xml的增删改查操作
工作之余,总结一下xml操作的一些方法和心得! tip: xmltype函数是将clob字段转成xmltype类型的函数,若字段本身为xmltype类型则不需要引用xmltype()函数 同名标签用数 ...
- Java 存储和读取 oracle CLOB 类型字段的实用方法
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.Str ...
- Mac下配置环境变量重启后不生效解决(.bash_profile vs .bashrc)(bash/zsh下不加载.bashrc问题解决)
参考上一篇文章说明:http://www.cnblogs.com/EasonJim/p/6283094.html 得知加载顺序如下: /etc/profile /etc/paths ~/.bash_p ...
- 利用 ASP.NET 的内置功能抵御 Web 攻击 (1)
摘要: Dino 总结了最常见的 Web 攻击类型,并介绍了 Web 开发人员可以如何使用 ASP.NET 的内置功能来改进安全性. 一.ASP.NET 开发人员应当始终坚持的做法 如果您正在阅读本文 ...
- 2016-2017-2 20155309 南皓芯java第六周学习总结
教材内容详解 这一次主要学习的是第十章与第十一章的内容.主要讲述了串流,字符处理和线程以及并行API. 输入输出 串流:Java中的数据有来源(source)和目的地(destination),衔接两 ...
- python內建模块之datetime
from:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193755 ...
- MySQL 5.6 Replication 复制 FAQ
原文请参照MySQL官方文档Reference Manual,版本5.6.10. 复制功能使得数据可以从一个MySQL数据库(master主库)复制到另一个或多个MySQL数据库(slave从库).缺 ...
- thymeleaf:字符串拼接+输出单引号
代码: <a href="#" th:onclick="${'removeArticleImg('''+cmsImg.imgID+''')'}">删 ...
- hadoop控制map个数(转)
原文链接:https://blog.csdn.net/lylcore/article/details/9136555 hadooop提供了一个设置map个数的参数mapred.map.task ...