java基础之JDBC九:DbUtils的简介及使用
DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
使用步骤:
A: 获取可以执行SQL语句的对象.
public QueryRunner();
public QueryRunner(DataSource ds); //如果需要用到连接池对象了, 会自动从数据库连接池中获取. B: 执行SQL语句, 获取结果集.
*** query(String sql,ResultSetHandler rsh, Object... values); //执行查询语句
ResultSetHandler: //是一个接口, 表示对 结果集的处理方式, 传入的参数不同, 返回值也不同.
int update(String sql,Object... values); //执行更新语句 C: 操作结果集. //可变参数的底层其实是一个: 数组.
ResultSetHandler接口的子类:
ArrayHandler 将结果集第一行转成对象数组 Object[]
ArrayListHandler List<Object[]>
将结果集中的每一行数据都转成一个对象数组,再将转成的多个对象数组存放到List中 BeanHandler 将结果集第一行数据封装到一个对应的业务类实例中
// new BeanHandler<业务类的类型>(业务类的字节码文件对象);
// new BeanHandler<Ledger>(Ledger.class);
BeanListHandler
将结果集中的每一行数据都封装到一个对应的业务类实例中,再将多个业务类实例对象存放到List里。
// new BeanListHandler<业务类的类型>(业务类的字节码文件对象);
// new BeanListHandler<Ledger>(Ledger.class);
MapHandler 将结果集中的第一行数据封装到一个Map中,key是列名 String ,value是对应的值 Obje
MapListHandler 将结果集中的每一行数据都封装到一个Map里,然后再将多个Map存放到List ColumnListHandler 将结果集中的指定列的数据存储到List集合
//new ColumnListHandler<该列的类型_写的是引用类型>(列名);
//new ColumnListHandler<Double>("money");
ScalarHandler 进行单值查询,如:select count(*) from //一行一列
//new ScalarHandler<该列的类型_写的是引用类型>(列名);
//new ScalarHandler<Long>("counts"); 求满足条件的数据共有多少行
KeyedHandler 将结果集中的每一行数据都封装为一个Map(Map<String,Object>),
再将这些Map再存到一个Map里,其key为KeyedHandler指定的列,
如果没有指定则使用第一个查询的字段。
/*
1 2 3 4
Map <String,Map<String,Object>> map= qr.query(conn, sql, new KeyedHandler<String>("lid")); 1:代表的是 传入的指定的列名(要求不能重复,一般传的是主键)
2:代表的是 数据库表中的每一行数据(列名做键,具体的数据做值)
3:代表的是 传入的指定的列的 数据类型
4:代表的是 传入的指定的列 */
使用DbUtils执行更新操作:
/**
* 使用DbUtils执行更新操作
* 使用之前需要导入jar包
*/
public class Test {
public static void main(String[] args) {
//获取可执行sql语句的对象
//这里构造函数里需要传一个连接池对象 我们使用之前封装的C3P0简单工具类获取一个连接池对象
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
//执行sql语句 获取返回结果
String sql = "UPDATE users SET psw = ? WHERE uid = ?";
try {
Object[] obj = {null, "亚索", "hasagei"};
int num = qr.update(sql, obj);
System.out.println(num > 0 ? "添加成功" : "添加失败");
} catch (SQLException e) {
e.printStackTrace();
}
//不用再close了 因为DbUtils帮我们做了
}
}
使用DbUtils执行查询操作:
/**
* DbUtils执行查询操作
*/
public class Test {
public static void main(String[] args) { } /**
* ArrayHandler 把查询的第一条数据封装成Object类型的对象返回
*/
private static void method1() {
//获取执行sql的对象
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
//执行sql
String sql = "SELECT * FROM users WHERE uid = ?";
try {
Object[] obj = qr.query(sql, new ArrayHandler(), );
System.out.println(Arrays.toString(obj));
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* ArrayListHandler 把查询的每一条数据封装成Object类型 放到List<Object>中 返回
*/
public static void method2() {
//获取执行sql的对象
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
//执行sql
String sql = "SELECT * FROM users";
try {
List<Object[]> list = qr.query(sql, new ArrayListHandler());
for (Object[] obj : list) {
System.out.println(Arrays.toString(obj));
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* MapHandler 把第一条数据封装成: Map<String,Object>, 键:数据表的列名做键 值:该列的数据做值
*/
public static void method3() {
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
String sql = "SELECT * FROM users WHERE uid = ?";
try {
Map<String, Object> map = qr.query(sql, new MapHandler(), );
System.out.println(map);
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* MapListHandler 把每一条数据封装成Map<String,Object>, 整体放入: List<Map<String,Object>>
*/
public static void method4() {
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
String sql = "SELECT * FROM users";
try {
List<Map<String, Object>> list = qr.query(sql, new MapListHandler());
for (Map<String, Object> map : list) {
System.out.println(map);
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* BeanHandler 把第一条数据封装成 JavaBean对象返回
*/
public static void method5() {
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
String sql = "SELECT * FROM users WHERE uid = ?";
try {
Users user = qr.query(sql, new BeanHandler<Users>(Users.class), );
System.out.println(user);
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* BeanListHandler 把每一条数据封装成JavaBean 放到List集合中返回
*/
public static void method6() {
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
String sql = "SELECT * FROM users";
try {
List<Users> list = qr.query(sql, new BeanListHandler<Users>(Users.class));
for (Users user : list) {
System.out.println(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* ColumnListHandler 根据查询的结果集 把其中一列放到List集合中返回
*/
public static void method7() {
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
String sql = "SELECT * FROM users";
try {
List<Object> list = qr.query(sql, new ColumnListHandler("uname"));
for (Object obj : list) {
System.out.println(obj);
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* ScalarHandler 把查询结果的第一行第一列的数据封装成Object返回
*/
public static void method8() {
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
String sql = "SELECT COUNT(1) FROM users WHERE uid BETWEEN ? AND ?";
try {
Object count = qr.query(sql, new ScalarHandler(), , );
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 把每一条数据封装成Map<String,Object>, 整体放入: Map<指定的列,Map<String,Object>>
*/
public static void method9() {
QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
String sql = "SELECT * FROM users";
try {
Map<Object, Map<String, Object>> maps = qr.query(sql, new KeyedHandler("uname"));
for (Object key : maps.keySet()) {
System.out.println(key + "--" + maps.get(key));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
java基础之JDBC九:DbUtils的简介及使用的更多相关文章
- java基础(29):JDBC、DBUtils
1. JDBC 1.1 JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...
- java基础(11) -JDBC
java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...
- java基础解析系列(九)---String不可变性分析
java基础解析系列(九)---String不可变性分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---In ...
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- Java基础-StringBuffer类与StringBuilder类简介
Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...
- java基础之JDBC六:DBCP 数据库连接池简介
我们之前写的代码中的数据库连接每次都是自己创建,用完以后自己close()销毁的,这样是很耗费资源的,所以我们引入DBCP DBCP简介 概述: Data Base Connection Pool, ...
- 【Java基础】JDBC简明教程
目录 1. 常用类 2. JDBC编程步骤 3. 事务处理 4. 数据库连接池 5. JDBC列子代码 6. 使用Apache的JDBC工具类 虽然在平时的开发过程中我们不会直接使JDBC的API来操 ...
- java基础之JDBC一:概述及步骤详解
1. JDBC的简介 概述: 就是Java用来操作不同数据库(DBMS)的类库(技术), 本质就是一些类和接口. /* 类: DriverManager 接口: Driver, Connection, ...
- Java基础93 JDBC连接MySQL数据库
本文知识点(目录): 1.什么是jdbc 2.jdbc接口的核心API 3.使用JDBC技术连接MySQL数据库的方法 4.使用Statement执行sql语句(DDL.DML. ...
随机推荐
- VC++6.0/MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能
Ctrl组合键ASCII码 ^Z代表Ctrl+z ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符0(00) ...
- poj 1952 最长公共子序列计数
看代码就懂了 不解释 3 1 1 1 1 2 2 2 1 1 1 3 第一个3 和最后一个 3 只需要一个就够了,,, #include<iostream> #include< ...
- linux之epoll
1. epoll简介 epoll 是Linux内核中的一种可扩展IO事件处理机制,最早在 Linux 2.5.44内核中引入,可被用于代替POSIX select 和 poll 系统调用,并且在具有大 ...
- asp.net core microservices 架构之 分布式自动计算(二)
一 简介 上一篇介绍了zookeeper如何进行分布式协调,这次主要讲解quartz使用zookeeper进行分布式计算,因为上一篇只是讲解原理,而这次实际使用, ...
- 谨慎安装Python3.7.0,SSL低版本导致Pip无法使用
最新新配置了一台服务器.安装 的时候直接使用了最新的Python 3.7最新版本. 安装成功,编译成功.但是用pip 安装包的时候提示:pip is configured with locations ...
- Spring AOP声明式事务异常回滚
近日测试用例,发现这样一个现象:在业务代码中,有如下两种情况,比如:throw new RuntimeException("xxxxxxxxxxxx"); 事物回滚throw ne ...
- go基本数据类型与运算符
GO基本类型1.布尔(bool) 长度:1字节 取值范围:true,false 注意事项:不可用数字代表true或false2.整型(int/uint) 根据平台 肯能为32位或64位3. 8位整型: ...
- Linux:远程连接 SSH
一.认识 SSH 定义 SSH(Secure shell):安全外壳协议:是建立在应用层基础上的安全协议: 通过 SSH 进行服务端连接,不容易被窃取信息: 连接服务器 ssh 服务器名 + @ + ...
- 1108 Finding Average
题意:根据条件判定哪些数是合法的,哪些是不合法的.求其中合法的数的平均值. 思路:字符串处理函数,考虑到最后输出的时候需要控制格式,因此选用scanf()和printf().另外需要了解atof()函 ...
- 1097 Deduplication on a Linked List
题意: 给出一个链表,删除绝对值相同的结点,对于每个绝对值为K的结点,只保留第一次出现的那个.把被移除的结点组成一个新链表,输出删除去重后的链表和新链表. 思路:考察链表的“删除”操作,不难. 代码: ...