java中的DBUtils的使用
来源:互联网 发布:鼠标质量排行 知乎 编辑:程序博客网 时间:2024/06/07 09:26
概述:
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
Dbutils三个核心功能介绍
1.QueryRunner中提供对sql语句操作的API.
2.ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
3. DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
准备数据:
l 创建表:
create tableproduct( pid int primary key, pname varchar(20), price double, category_id varchar(32));
l 插入表记录:
INSERT INTO product(pid,pname,price,category_id)VALUES(1,'联想',5000,'c001');INSERT INTO product(pid,pname,price,category_id)VALUES(2,'海尔',3000,'c001');INSERT INTO product(pid,pname,price,category_id)VALUES(3,'雷神',5000,'c001');INSERT INTO product(pid,pname,price,category_id)VALUES(4,'JACK JONES',800,'c002');INSERT INTO product(pid,pname,price,category_id)VALUES(5,'真维斯',200,'c002');INSERT INTO product(pid,pname,price,category_id)VALUES(6,'花花公子',440,'c002');INSERT INTO product(pid,pname,price,category_id)VALUES(7,'劲霸',2000,'c002');INSERT INTO product(pid,pname,price,category_id)VALUES(8,'香奈儿',800,'c003');INSERT INTO product(pid,pname,price,category_id)VALUES(9,'相宜本草',200,'c003');INSERT INTO product(pid,pname,price,category_id)VALUES(10,'面霸',5,'c003');INSERT INTO product(pid,pname,price,category_id)VALUES(11,'好想你枣',56,'c004');INSERT INTO product(pid,pname,price,category_id)VALUES(12,'香飘飘奶茶',1,'c005');INSERT INTO product(pid,pname,price,category_id)VALUES(13,'果9',1,NULL);
QueryRunner核心类介绍
提供数据源
l 构造方法
QueryRunner(DataSource) 创建核心类,并提供数据源,内部自己维护Connection
l 普通方法
update(String sql , Object ...params) 执行DML语句
query(String sql ,ResultSetHandler , Object ... params) 执行DQL语句,并将查询结果封装到对象中。
QueryRunner实现添加、更新、删除操作
import java.sql.Connection;import java.sql.SQLException;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;/** * 等效 JdbcUtils,用于提供获得连接工具类 */public class C3P0Utils {//连接池private static ComboPooledDataSource dataSource = new ComboPooledDataSource("配置文件名"); /** * 获得数据源(连接池) * @return */public static DataSource getDataSource(){return dataSource;}/** * 获得连接 * @return * @throws SQLException */public static Connection getConnection() throws SQLException{//将从连接池中获得连接return dataSource.getConnection();}}
public void insert() throws SQLException{//获取一个用来执行SQL语句的对象 QueryRunnerQueryRunner 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(r);}
删除一条记录
@Testpublic void demo04() 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(r);}
QueryRunner实现查询操作
l query(String sql,ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作
1.1.1 ResultSetHandler结果集处理类
ArrayHandler
将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler
将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
BeanHandler
将结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler
将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ColumnListHandler
将结果集中指定的列的字段值,封装到一个List集合中
KeyedHandler
将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。
MapHandler
将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值
MapListHandler
将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。
ScalarHandler
它是用于单数据。例如select count(*) from 表操作。
1.1.2 JavaBean
JavaBean就是一个类,在开发中常用语封装数据。具有如下特性
1. 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。
2. 提供私有字段:private 类型 字段名;
3. 提供getter/setter方法:
4. 提供无参构造
public class Product {
private String pid;
private String pname;
private Double price;
private String category_id;
//省略 getter和setter方法
}
1.1.3 BeanHandler
/* * 查询数据表结果集处理其中一种方式: * BeanHandler处理方式 * 将数据表的结果集第一行数据,封装成JavaBean类的对象 * 构造方法: * BeanHandler(Class<T>type) * 传递一个Class类型对象,将结果封装到哪个类的对象呢 * ZhangWu类的Class对象 */@Testpublicvoid demo01() throws SQLException{ // 通过id查询详情,将查询结果封装到JavaBeanproduct //1核心类 QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource()); //2 sql语句 String sql = "select * from productwhere pid = ?"; //3 实际参数 Object[] params = {6}; //4 查询并封装 Product product = queryRunner.query(sql,new BeanHandler<Product>(Product.class), params); System.out.println(product); }
1.1.4 BeanListHandler
/* * 查询数据表结果集处理其中一种方式: * BeanListHandler处理方式 * 将数据表的每一行数据,封装成JavaBean类对象 * 多行数据了,多个JavaBean对象,存储List集合 */@Testpublicvoid demo02() throws SQLException{ //查询所有,将每一条记录封装到一个JavaBean,然后将JavaBean添加到List中,最后返回List,BeanListHandler QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource()); String sql = "select * fromproduct"; Object[] params = {}; List<Product> list =queryRunner.query(sql, new BeanListHandler<Product>(Product.class),params); for(Product product : list){ System.out.println(product); }}
1.1.5 ScalarHander
/* * 查询数据表结果集处理其中一种方式: * ScalarHandler处理方式 * 处理单值查询结果,执行的select语句后,结果集只有1个 */@Testpublicvoid demo03() throws SQLException{ // ScalarHandler : 用于处理聚合函数执行结果(一行一列) // * 查询总记录数 QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource()); String sql = "select count(*) fromproduct"; Long obj = queryRunner.query(sql, newScalarHandler<Long>()); //System.out.println(obj.getClass()); System.out.println(obj); }
1.1.6 MapHandler
/* * 查询数据表结果集处理其中一种方式: * MapHandler处理方式 * 将数据表结果集的第一行数据,封装成Map集合 * 键: 数据表中的列 * 值: 这个列中的数据 * * 处理方式的Map集合,是LinkedHashMap的子类 */@Testpublicvoid demo04() throws SQLException{ // MapHandler : 将查询到的一条记录,封装到Map中,map.key=字段名,map.value=值 // * 主要用途:多表操作、将数据转换json 等 QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource()); String sql = "select * from productwhere pid = ?"; Object[] params = {6}; Map<String,Object> map = queryRunner.query(sql,new MapHandler(), params); System.out.println(map); // 将Map数据封装到指定JavaBean }
1.1.7 MapListHandler
/* * 查询数据表结果集其中一种处理方式: * MapListHandler处理方式 * 将数据表的结果集的每一行封装成Map集合 * 数据表多行数据,出现多个Map集合,存储List集合 */@Testpublic voiddemo05() throws SQLException{ // MapListHandler : 查询所有数据,将每一条记录封装到Map中,然后将Map添加到List中,最后返回List // * 主要用途:多表操作 等 QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource()); String sql = "select * fromproduct"; List<Map<String,Object>> list= queryRunner.query(sql, new MapListHandler()); for(Map<String,Object> map : list){ System.out.println(map); } }
1.1.8 ArrayHandler
/* * 查询数据表结果集处理其中一种方式: * ArrayHandler处理方式 * 将数据表中的第一行数据,存储到对象数组Object[]中 * * 注意: 获取查询后的第一行数据,如果查询不到结果集,返回的对象数组的length=0 */@Testpublicvoid demo06() throws SQLException{ // ArrayHandler :查询一条记录,将数据封装到数组中 QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource()); String sql = "select * from productwhere pid = ?"; Object[] params = {6}; Object[] arr = queryRunner.query(sql, newArrayHandler(), params); System.out.println(arr); System.out.println(Arrays.toString(arr));}
1.1.9 ArrayListHandler
/* * 查询数据表结果集处理其中一种方式: *ArrayListHandler处理方式 * 将数据表中的每一行数据,存储到一个对象数组Object[]中 * 而数据表中会有多行数据,产生多个对象数组, 存储到List集合中 */@Testpublicvoid demo07() throws SQLException{ // ArrayListHandler :查询所有,将每一条记录封装到数组中,然后添加到List,最后返回list QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource()); String sql = "select * fromproduct"; List<Object[]> list =queryRunner.query(sql, new ArrayListHandler()); for(Object[] arr : list){ System.out.println(Arrays.toString(arr)); }}
1.1.10 KeyedHandler
@Testpublic voiddemo08() throws SQLException{ // KeyedHandler : newKeyedHandler("字段名称"),查询所有,将查询结果封装到Map中 // * map.key=为指定“字段名称”对应的值 // * map.value=为当前整条记录所有的值,数据为Map<字段名,值> // 类型 Map<String ,Map<String,Object> > QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource()); String sql = "select * fromproduct"; Map<String,Map<String,Object>>map = queryRunner.query(sql, newKeyedHandler<String>("pname")); for(Map.Entry<String,Map<String,Object>> entry : map.entrySet()){ System.out.println(entry.getKey()); System.out.println(entry.getValue()); } }
1.1.11 ColumnListHandler
/* * 查询数据表结果集处理其中一种方式: * ColumnListHandler处理方式 * 将查询数据表结果集中的某一列数据,存储到List集合 * 哪个列不清楚,数据类型也不清楚, List<Object> * ColumnListHandler构造方法 * 空参数: 获取就是数据表的第一列 * int参数: 传递列的顺序编号 * String参数: 传递列名 * * 创建对象,可以加入泛型,但是加入的数据类型,要和查询的列类型一致 */@Testpublicvoid demo09() throws SQLException{ // ColumnListHandler : 查询指定一列数据 QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource()); String sql = "select * fromproduct"; List<String> list =queryRunner.query(sql, new ColumnListHandler<String>("pname")); System.out.println(list);}
- java中的DBUtils的使用
- 使用java的DBUtils
- Java DbUtils的使用
- dbutils的使用
- DBUtils框架的使用
- DButils的使用感受
- DbUtils 的常规使用
- common-dbutils的使用
- Dbutils 的使用
- DButils 的使用
- apache--dbutils的使用
- DBUtils的使用
- DbUtils的使用
- DbUtils的使用
- DBUtils的使用
- DbUtils工具的使用
- dbUtils工具的使用
- DBUtils工具的使用
- HDU1002 Sum Problem 大数 Java&&C
- Sqlite特点
- 【CSS揭秘】案例3、灵活的背景定位
- hive select报错 Unable to determine if hdfs
- 2017-09-20表格
- java中的DBUtils的使用
- 抽象类和接口的区别
- touch事件解析
- Linux GPIO 的注册与申请
- 纵向的ListView或RecyclerView点击都可以让item跳到中间(类似TabLayout的滑动)
- ActiveMQ系列—ActiveMQ性能优化(中2)(处理规则和优化)
- Linux 程序设计中由线程使用不当引起的内存泄露
- Oracle 中数据类型变更无效 ---ora-22858:数据类型的变更无效 for clod
- 2017研究生数学建模题