数据库DBUtils基本使用
Apache—DBUtils简介
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
API介绍:
- org.apache.commons.dbutils.QueryRunner
- org.apache.commons.dbutils.ResultSetHandler
工具类
- org.apache.commons.dbutils.DbUtils
QueryRunner类
- public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
- public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
- public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。
- public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
- public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。
代码示例:
@Test
public void testQuery(){ //2 使用期update方法
String sql = "select * from t_user";
Connection connection = null; try {
connection = MysqlUtils.getConnection();
/**
* query方法的返回值取决于其ResultSetHandler参数的handle方法的返回值
*/
List<User> list = queryRunner.query(connection, sql, new BeanListHandler<User>(User.class));
System.out.println(list.size());
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} @Test
public void testUpdate(){ //2 使用期update方法
String sql = "update t_user set password = ? where username = ?";
Connection connection = null; try {
connection = MysqlUtils.getConnection();
queryRunner.update(connection, sql,"cheng", "zhong");
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
} }
ResultSetHandler接口
- ArrayHandler:把结果集中的第一行数据转成对象数组。
- ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
- BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
- BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
- ColumnListHandler:将结果集中某一列的数据存放到List中。
- KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
- MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
- MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
其中选择比较重要的做示例:
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
/**
* BeanHandler: 把结果集的第一条记录转为创建 BeanHandler 对象时传入的 Class
* 参数对应的对象.
*/
@Test
public void testBeanHanlder(){
Connection connection = null; try {
connection = MysqlUtils.getConnection();
String sql = "select * from t_user WHERE uid >= ?"; User user = queryRunner.query(connection, sql, new BeanHandler<User>(User.class), 5); System.out.println(user.toString());
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
/**
* BeanListHandler: 把结果集转为一个 List, 该 List 不为 null, 但可能为
* 空集合(size() 方法返回 0)
* 若 SQL 语句的确能够查询到记录, List 中存放创建 BeanListHandler 传入的 Class
* 对象对应的对象.
*/
@Test
public void testBeanListHandler(){
Connection connection = null; try {
connection = MysqlUtils.getConnection();
String sql = "select * from t_user"; List<User> userList = queryRunner.query(connection,sql, new BeanListHandler<User>(User.class)); System.out.println(userList);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
/**
* MapHandler: 返回 SQL 对应的第一条记录对应的 Map 对象.
* 键: SQL 查询的列名(不是列的别名), 值: 列的值.
*/
@Test
public void testMapHandler(){
Connection connection = null; try {
connection = MysqlUtils.getConnection();
String sql = "select * from t_user"; Map<String, Object> result = queryRunner.query(connection,
sql, new MapHandler()); System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
/**
* MapListHandler: 将结果集转为一个 Map 的 List
* Map 对应查询的一条记录: 键: SQL 查询的列名(不是列的别名), 值: 列的值.
* 而 MapListHandler: 返回的多条记录对应的 Map 的集合.
*/
@Test
public void testMapListHandler(){
Connection connection = null; try {
connection = MysqlUtils.getConnection();
String sql = "select * from t_user"; List<Map<String, Object>> result = queryRunner.query(connection,
sql, new MapListHandler()); System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
数据库DBUtils基本使用的更多相关文章
- 数据库——DBUtils和连接池
第一章 DBUtils如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简 ...
- 数据库dbutils
common-dbutils.jarQueryRunnerupdate方法:* int update(String sql, Object... params) --> 可执行增.删.改语句* ...
- OSChina底层数据库操作的类(QueryHelper)源代码
OSChina 使用的是 dbutils 这个JDBC的封装类库来进行数据库操作. 而 QueryHelper 则是在 dbutils 的基础上进行一级简单的封装,提供一些经常使用的数据库操作方法和对 ...
- 7.数据库、Contentobserver
群组页是程序内部维护的一个数据库,其中一张表groups,用于存放创建的群组,还有一张表thread_group,用于关联群组和系统短信数据库中的会话. 数据库应该这样设计 MySqliteHelpe ...
- Xutils3的使用
Xutils是前两年很火的一个三方库(githup地址),是一个工具类,分为4个模块:DbUtils.HttpUtils.ViewUtils. BitmapUtils,还有一个非常使用功能就是LogU ...
- Java爬取51job保存到MySQL并进行分析
大二下实训课结业作业,想着就爬个工作信息,原本是要用python的,后面想想就用java试试看, java就自学了一个月左右,想要锻炼一下自己面向对象的思想等等的, 然后网上转了一圈,拉钩什么的是动态 ...
- Android后台数据接口交互实现注册功能
首先,在ecplise里面新建一个叫做TestServices的web工程.在WebContent--WEB-INF--libs文件夹下导入两个jar包:mysql-connector-java-6. ...
- JSP应用开发 -------- 电纸书(未完待续)
http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术 第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...
- 使用ThreadLocal、Apache的dbutils的QueryRunner和dbcp2数据库连接池的BasicDataSource封装操作数据库工具
package hjp.smart4j.framework.helper; import hjp.smart4j.framework.util.CollectionUtil; import hjp.s ...
随机推荐
- TPYBoard V102:能跑Python的stm32开发板
近来micropython语言做硬件编程很火,随之而来的就开始带动着支持micropython语言编程的开发板也开始火的发烫,今天小编就来和大家介绍一款很经典的micropython开发板-TPYBo ...
- 【转】Jenkins 安装与配置
基本配置: 1.Linux安装配置jdk环境 1.1.上传到 Linux 服务器:例如: 上传至: cd /usr/local 1.2.解压: rpm -ivh jdk-8u111-linux-x64 ...
- HTML之前端操作div标签布局
事例图片: div元素是用于分组HTML元素的块级元素 上图代码示例如下: <!DOCTYPE html> <html lang="en"> <hea ...
- Windows程序设计学习笔记(一)Windows内存管理初步
学习Windows程序设计也有一些时间了,为了记录自己的学习成果,以便以后查看,我希望自己能够坚持写下一系列的学习心得,对自己学习的内容进行总结,同时与大家交流.因为刚学习所以可能有的地方写不不正确, ...
- python 学习源码练习(1)
#编译方式,python3 文件名 #!/usr/bin/python3#print('hello world') mystring = 'hello world'print (mystring) # ...
- apache2.2版本安装说明
部署httpd服务 apache是一个模块化设计的服务,所谓的模块化就是将各个功能,特性都独立的分开,这样设计的好处是可扩展性强,各个功能之间的依赖性相对较弱,在后期修改,升级,添加新功能是非常方 ...
- [转载]基于LVS的AAA负载均衡架构实践
摘要 本次分享将从一次实际的负载均衡改造案例出发,通过介绍项目背景.选型思路.测试方法和问题分析等方面展开,总结负载均衡架构的一般套路和经验教训. 一.背景 项目背景是某企业的AAA管理系统, AAA ...
- echart
先介绍echart: 官网: http://echarts.baidu.com 看名字就知道是百度出品的. ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC ...
- 如何转换MySQL表的引擎
有很多种方法可以将表的存储引擎转换成另一种引擎.每种方法都有其优缺点,在这里介绍四种方法: 选择优先级(pt-online-schema-change > 创建与查询 > 导出和导入 &g ...
- 在什么情况下使用@ResponseBody 注解?
@Controller @RequestMapping("/") public class HelloController { @RequestMapping(value = &q ...