DBUtils
Posted huangqiang97
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBUtils相关的知识,希望对你有一定的参考价值。
1概述
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
Dbutils三个核心功能介绍
QueryRunner中提供对sql语句操作的API.
ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
2QueryRunner核心类
Int update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作,parms不定参数用于匹配sql语句中的占位符,可没有可为多个,也可以把参数存入数组,把数组传入函数,返回改变的行数目。
T< > query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作,结果为一个泛型,具体类型依据REsultSetHandler确定。
DBUtils有public static void closeQuietly(Connection conn, Statement stmt, ResultSet rs)
public static void closeQuietly(Connection conn)
public static void closeQuietly(ResultSet rs)
public static void closeQuietly(Statement stmt)
实现关闭资源并自动处理异常。
QueryRunner实现添加、更新、删除操作
update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作
3事务处理
把多条语句包装成为一个事务,一起执行,结果只能是成功或者失败,成功就可以commit提交,失败就可以rollback回滚
QueryRunner实现查询操作
T<> query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作
ResultSetHandler结果集处理类
ArrayHandler |
将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值 |
ArrayListHandler |
将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。 |
BeanHandler |
将结果集中第一条记录封装到一个指定的javaBean中。 |
BeanListHandler |
将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中 |
ColumnListHandler |
将结果集中指定的列的字段值,封装到一个List集合中 |
ScalarHandler |
它是用于单数据。例如select count(*) from 表操作。 |
MapHandler |
将结果集第一行封装到Map集合中,Key 列名, Value 该列数据 |
MapListHandler |
将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合 |
|
|
ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值。
ArrayListHandler:将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。,数组中的每一个元素就是这条记录中的每一个字段的值,返回值:List<Object[]>
JavaBean
JavaBean就是一个类,在开发中常用封装数据。具有如下特性
需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。
提供私有字段:private 类型 字段名;
提供getter/setter方法:
提供无参构造
BeanHandler :将结果集中第一条记录封装到一个指定的javaBean中。这里的javabean指 内部private成员变量与查询结果的类型要对应,查询结果可以只包含javabean内部分变量,包含会被正常赋值,其余部分为默认 值,set方法名称要与数据库中字段完全对应,提供get set 方法、空差数构造器。
Javabean类对象=queryRunner.query(Connect connect,String sql, new BeanHandler<javabean类名称 >(javabean类的class文件对象),Object ….paems);
List<JavaBean类名称> listName= queryRunner.query(Connect connect,String sql, new BeanListHandler<javabean类名称 >(javabean类的class文件对象),Object …parms);
BeanListHandler :将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中
List<列属性 > list = qr.query(con, sql, new ColumnListHandler<列属性 >(列名称或者序号),Object …parms);//要查询的列一定要包含在SQL select语句中。
ScalarHandler:它是用于单数据。例如select count(*) from 表操作。Double max = qr.query(conn, sql, new ScalarHandler<Double>(), params);//把查到的单一结果存入max.
MapHandler :把查询结果的第一行存储在Map中,字段名为key,值为value.例如:Map<字段类型,值类型 > map = qr.query(con, sql, new MapHandler(),parms);
MapListHandler:将结果集每一行存储到Map集合,键:列名,值:数据,再把Map存入List中,
MapHandler, MapListHandler:中的Map存入与取出顺序相同,Map实质为LinkedHashMap,有序Map.: List<Map<String,Object>> list=queryRunner.query(connection,SQL,new MapListHandler(),parms);
4连接池概述
1.1 概念
用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。
//对连接池对象 进行基本的配置
BasicDataSource dataSource = new BasicDataSource();//BasicDataSource类 是 DataSource接口的实现类
dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
dataSource.setUrl(URL); //指定要连接的数据库地址
dataSource.setUsername(USERNAME); //指定要连接数据的用户名
dataSource.setPassword(PASSWORD); //指定要连接数据的密码
Connection con= dataSource.getConnection();//获得连接
1.2 工具
public class JDBCUtils {
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/daydb";
public static final String USERNAME = "root";
public static final String PASSWORD = "root";
public static BasicDataSource dataSource = new BasicDataSource();
//静态代码块
static {
//对连接池对象 进行基本的配置
dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
dataSource.setUrl(URL); //指定要连接的数据库地址
dataSource.setUsername(USERNAME); //指定要连接数据的用户名
dataSource.setPassword(PASSWORD); //指定要连接数据的密码
//对象连接池中的连接数量配置,可选的,不配置使用默认值。
datasource.setInitialSize(10);//初始化的连接数
datasource.setMaxActive(8);//最大连接数量
datasource.setMaxIdle(5);//最大空闲数,如果空闲大于5,部分链接会被关闭。
datasource.setMinIdle(1);//最小空闲,小于这个数值,会新开链接。
}
public static DataSource getDataSource(){
return dataSource;
}
}
使用实例:
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());//qr与数据源绑定,调用update ,query时不用在传递链接对象。
int line = qr.update(sql,new ArrayLIstHandlerparams(),parms);
以上是关于DBUtils的主要内容,如果未能解决你的问题,请参考以下文章