DBUtils的使用详解

本文详细介绍了JDBCUtils的作用,即从配置文件读取数据库连接参数,简化数据库连接创建。同时,讲解了DBUtils工具库,包括ResultSetHandler接口和QueryRunner类的使用,用于执行SQL查询和处理结果集。通过QueryRunner实现了数据的增删改查操作,展示了DBUtils如何简化JDBC操作。
摘要由CSDN通过智能技术生成

一、JDBCUtils的作用

JDBCUtils的作用:连接数据库的四大参数是:驱动类、URL、用户名、密码,这些参数都是与特定数据库关联,如果将来想要更改数据库,那么就要去修改这四大参数,那么为了不去修改代码,我们需要写一个JDBCUtils类,让它从配置文件中读取到配置参数,然后创建连接对象;


二、JDBCUtils的介绍

1、包org.apache.commons.dbutils

接口摘要
ResultSetHandler 将ResultSet转换为别的对象的工具。
RowProcessor 将ResultSet行转换为别的对象的工具。

类摘要
BasicRowProcessor RowProcessor接口的基本实现类。
BeanProcessor BeanProcessor匹配列明到Bean属性名,并转换结果集列到Bean对象的属性中。
DbUtils 一个JDBC辅助工具集合。
ProxyFactory 产生JDBC接口的代理实现。
QueryLoader 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。
QueryRunner 使用可插拔的策略执行SQL查询并处理结果集。
ResultSetIterator 包装结果集为一个迭代器。

2、包org.apache.commons.dbutils.handlers
ResultSetHandler接口的实现类

类摘要
AbstractListHandler 将ResultSet转为List的抽象类
ArrayHandler 将ResultSet转为一个Object[]的ResultSetHandler实现类
ArrayListHandler 将ResultSet转换为List<Object[]>的ResultSetHandler实现类
BeanHandler 将ResultSet行转换为一个JavaBean的ResultSetHandler实现类
BeanListHandler 将ResultSet转换为List的ResultSetHandler实现类
ColumnListHandler 将ResultSet的一个列转换为List的ResultSetHandler实现类
KeyedHandler 将ResultSet转换为Map的ResultSetHandler实现类
MapHandler 将ResultSet的首行转换为一个Map的ResultSetHandler实现类
MapListHandler 将ResultSet转换为List
的ResultSetHandler实现类
ScalarHandler 将ResultSet的一个列到一个对象。

3、包org.apache.commons.dbutils.wrappers
添加java.sql类中功能包装类。

类摘要
SqlNullCheckedResultSet 在每个getXXX方法上检查SQL NULL值的ResultSet包装类。
StringTrimmedResultSet 取出结果集中字符串左右空格的ResultSet包装类。


三、使用DBUtils

其实只是使用的话,只看两个类(DbUtils 和QueryRunner)和一个接口(ResultSethandler)就可以了。 1,DbUtils
DbUtils是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的。
这个类里的重要方法有:
close():
DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,
如果不是的话,它们就关闭连接、声明和结果集(ResultSet)。
CloseQuietly:
CloseQuietly这一方法不仅能在连接、声明或者结果集(ResultSet)为NULL情况下避免关闭,
还能隐藏一些在程序中抛出的SQLEeception。如果你不想捕捉这些异常的话,这对你是非常有用的。
在重载CloseQuietly方法时,特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),
这是因为在大多数情况下,连接、声明和结果集(ResultSet)是你要用的三样东西,而且在最后的块你必须关闭它们。
使用这一方法,你最后的块就可以只需要调用这一方法即可。
CommitAndCloseQuietly(Connection conn):
这一方法用来提交连接,然后关闭连接,并且在关闭连接时不向上抛出在关闭时发生的一些SQL异常。
LoadDriver(String driveClassName):这一方法装载并注册JDBC驱动程序,如果成功就返回TRUE。
使用这种方法,你不需要去捕捉这个异常ClassNotFoundException。使用loadDrive方法,编码就变得更容易理解,
你也就得到了一个很好的Boolean返回值,这个返回值会告诉你驱动类是不是已经加载成功了。2,ResultSetHandler
这一接口执行处理一个jaca.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更容易。
这一组件提供了ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, MapHandler, MapListHandler, and ScalarHandler等执行程序。

ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。
因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。
因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。
如果你发现这七个执行程序中没有任何一个提供了你想要的服务,你可以自己写执行程序并使用它。 3,QreryRunner
这个类使执行SQL查询简单化了,它与ResultSetHandler串联在一起有效地履行着一些平常的任务,它能够大大减少你所要写的编码。
QueryRunner类提供了两个构造器:其中一个是一个空构造器,另一个则拿一个 javax.sql.DataSource 来作为参数。
因此,在你不用为一个方法提供一个数据库连接来作为参数的情况下,提供给构造器的数据源(DataSource) 被用来获得一个新的连接并将继续进行下去。

这一类中的重要方法包括以下这些:
query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):
这一方法执行一个选择查询,在这个查询中,对象阵列的值被用来作为查询的置换参数。
这一方法内在地处理PreparedStatement 和ResultSet 的创建和关闭。
ResultSetHandler对把从 ResultSet得来的数据转变成一个更容易的或是应用程序特定的格式来使用。
query(String sql, Object[] params, ResultSetHandler rsh):
这几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,
并且它是从提供给构造器的数据源(DataSource) 或使用的setDAtaSource 方法中重新获得的。
query(Connection conn, String sql, ResultSetHandler rsh):
这执行一个不要参数的选择查询。
update(Connection conn, String sql, Object[] params):
这一方法被用来执行一个插入、更新或删除操作。对象阵列为声明保存着置换参数。

四、QueryRunner实现添加、更新、删除操作

添加public void insert() throws SQLException{ //获取一个用来执行SQL语句的对象 QueryRunner QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = " INSERT INTO product(pid,pname,price,category_id) VALUES(?,?,?,?);"; Object[] params = {100,“百岁山”, 5500, “c005”}; int line = qr.update(sql,params);// 用来完成表数据的增加、删除、更新操作 //结果集处理 System.out.println("line = " + line);}
更新@Testpublic void update() throws SQLException{ //1 核心类 QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); //2 准备sql语句 String sql = “update product set pname=?,price=?,category_id=? where pid=?”; //3 准备实际参数 Object[] params = {“芒果99”,“998”,“c009”,13}; //4 执行 int r = queryRunner.update(sql, params); System.out.println®; }
删除@Testpublic void delete() throws SQLException{ QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = “delete from product where pid = ?”; Object[] params = {99}; int r = queryRunner.update(sql, params); System.out.println®; }

总结DBUtils工具作用

简化JDBC的操作
DBUtils常用类与方法 QueryRunner 用来执行SQL语句对象update(Connection conn, String sql, Object… params) 插入表记录、更新表记录、删除表记录query(Connection conn, String sql, ResultSetHandler handler, Object… params) 查询表记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值