Javaweb学习笔记(DBUtils工具)
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