Javaweb学习笔记(DBUtils工具)

这篇博客详细介绍了DBUtils工具的使用,包括DBUtils类的关闭连接方法,QueryRunner类的查询和更新操作,以及ResultSetHandler接口的不同实现类如ArrayHandler、ArrayListHandler、BeanHandler等,还展示了如何利用DBUtils进行数据库的增删改查和事务处理。
摘要由CSDN通过智能技术生成

API介绍

DBUtils类

DButils类主要为关闭连接、装载JDBC驱动程序之类的常规工作提供方法,提供的方法都是静态方法。
1.close()方法
在DBUtils类中提供了三个重载的close()方法。这些方法都是关闭数据关闭数据连接、并且会检查参数,是否为NULL,如果不是该方法就会关闭Connection、Statement和ResultSet这三个对象。
2.closeQuietly(Connection conn、Statement stmt、ResultSet rs)方法
该方法用于关闭Connection、Statement、ResultSet对象,与close()方法相比, closeQuietly()方法不仅能在Connection、Statement和ResultSet对象为NULL的情况下避免关闭,还能隐藏一些程序抛出的异常。
3.commitAndCloseQuietly(Connection conn)
commitAndCloseQuietly()方法用来提交连接,然后关闭连接,并且在关闭连接是不抛出SQL异常
4.loadDriver(java.lang.String driverClassName)方法
loadDriver()方法用于装载并注册JDBC驱动程序,如果成功就返回true,使用该方法不用捕捉ClassNotFoundException异常。

QueryRunner类

QuieryRunner类简化了执行SQL语句的代码,提供了两个构造方法,一个是默认构造方法,另一个是需要javax.sql.DataSource作为参数的构造方法。因此不用为一个方法提供一个数据库连接的情况乡下提供给构造器的DataSource就可以用来获得连接。针对不同的数据库操作,QueryRunner类提供了不同的方法。
1.query(Conncetion conn,String sql,ResultSetHandler rsh,Object[] params)方法
该方法用于执行查询操作,其中参数params表示一个对象数组,该数组中每个元素都被用来作为查询语句的置换参数,该方法会自动处理PrepareStatement和ResultSet的创建和关闭。
2.query(String sql,ResultSetHandler rsh,Object[] params)方法
该方法用于执行查询操作,与第一个方法比,他不需要将Connection对象传递给方法。
3.query(Connection conn,String sql,ResultSetHander rsh)方法
该方法用于执行一个不需要置换参数的查询操作。
4.update(Connection conn,String sql,Object[] params)方法
该方法用来执行插入更新或者删除操作,其中参数params表示SQL语句的置换参数。
5.update(Connection conn,String sql)方法
该方法用于执行插入、更新或者删除操作,他不需要置换参数。

ResultSetHandler接口

ResultSetHandler接口用于执行处理Result结果集,他可以将结果集中的数据转化为不同的形式。ResultSetHandler提供了不同的实现类:
(1)AbstractKeyedHandler:该类为抽象类,能够把结果集里面的数据转化为用Map储存。
(2)AbstractListHandler:该类为抽象类,能都吧结果集里面的数据转换为用List存储
(3)ArrayHandler:把结果集中第一行数据转成对象数组
(4)ArrayListHandler:把结果集中的每一行数据都转成对象数组,再将数组存放到List中
(5)BaseResultSetHandler:把结果集转换成其他对象的扩展
(6) BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List中。
(7)BeanHander:将结果集中的第一行数据封装到一个对应的JavaBean实例中
(8)BeanMapHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,然后在指定key把没个JavaBean再存放到一个Map中。
(9)ColumnListHandler:将结果集中的某一列的数据存放到List中。
(10)KeyedHandler:将结果集中的每一行数据都封装到一个Map例,然后根据指定的key把没个Map再存放到一个Map里。
(11)MapHandler:将结果集中的第一行数据封装到一个Map例,key是列名,value是对应的值。
(12)MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List中。
(13)ScalarHandler:将结果集中某一条记录的其中某一列的数据存储成Object。

ResultSetHandler实现类

ArrayHandler和ArrayListHander

案例:
(1)首先创建chapter03,然后在数据库中创建一个表users,具体语句如下:

create database chapter03;
 use chapter03;
  CREATE TABLE user(id INT(3) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL,password VARCHAR(20) NOT NULL);
 insert into user(name,password) values('zhangsan','123456');
 insert into user(name,password) values('lisi','123456');
 insert into user(name,password) values('wangwu','123456');

在这里插入图片描述
(2)向tomcat引入DBUtils包。
在这里插入图片描述
下载地址:commons-dbutils-1.7.jar下载地址

(3)在Eclipse中创建一个名为chapter03的java工程
将之前的c3p0-config.xml文件复制到src文件,之前的cn.itcst.JDBCUtils.java导入到chapter03中。
然后创建一个BaseDao类,用来进行通用查询。

package cn.itcast.jdbc.example.dao;
import java.sql.*;
import cn.itcast.jdbc.example.utils.*;
import org.apache.commons.*;
import org.apache.commons.dbutils.ResultSetHandler;
public class BaseDao {
	//优化查询
	public static Object query(String sql,ResultSetHandler<?>rsh,Object...params)throws SQLException{
		Connection conn=null;
		PreparedStatement pstmt=null;
		ResultSet  rs=null;
		try{
			conn=JDBCUtils.getConnection();
			pstmt=conn.prepareStatement(sql);
			for (int i=0;params!=null&&i<params.length;i++){
				pstmt.setObject(i+1,params[i]);
			}
			rs=pstmt.executeQuery();
			Object obj=rsh.handle(rs);
			return obj;
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.release(rs,pstmt,conn);
		}
		return rs;
		
	}
}

创建类ResultSetTest1,编写一个testArrayHandler()类,演示ArrayHandler()的用法

package cn.itcast.jabc.example;
import java.sql.*;
import org.apache.commons.dbutils.handlers.*;
import cn.itcast.jdbc.example.dao.*;
public class ResultSetTest1 {
	public static void t
commons-dbutils包是Apache开源组织提供的用于操作数据库工具包。简单来讲,这个工具包就是用来更加方便我们操作数据库的,最近工作中使用了一下,感觉确实方便很多,基本告别自己封装JDBC代码对数据库进行增删改查了。代码看着也很简洁。 例如: 增删改查使用的类:QueryRunner类+ResultSetHandler类,使用这俩类就可以解决掉。 QueryRunner类的query()方法:new QueryRunner().query(Connection conn, String sql, ResultSetHandler rsh) query方法后面参数中加一个Connection连接,是在获取不到数据源的情况下,也就是说,QueryRunner的实例化构造函数使用无参的那个,下面我的实现代码就是用的这种方法。 当然还有一种实例化:new QueryRunner(new Datasource()).query(String sql, ResultSetHandler rsh) query方法中的参数 ResultSetHandler 参数中加上ResultSetHandler接口的实现类参数(下面这些实现类),执行完SQL后,返回的数据就是已经封装好的我们想要的结果了。 ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[] BeanHandler :将ResultSet中第一行的数据转化成Bean对象 BeanListHandler :将ResultSet中所有的数据转化成List ColumnListHandler :将ResultSet中某一列的数据存成List KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map,Map中存放的是数据 MapHandler :将ResultSet中第一行的数据存成Map MapListHandler :将ResultSet中所有的数据存成List<Map> ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值