文档章节

DbUtils使用笔记

iborder
 iborder
发布于 2016/12/08 21:09
字数 477
阅读 145
收藏 1
点赞 0
评论 0

Apache Commons DbUtils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,能极大简化JDBC编码的工作量,同时也不会影响程序的性能。

最新版本是Apache Commons DbUtils 1.6

测试实例

package cn.iborder.test;

import java.beans.PropertyVetoException;
import java.sql.SQLException;
import java.util.List;
import java.util.Random;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import cn.iborder.entity.Student;

public class Test3 {
	
	/**
	 * 数据源
	 * @return
	 */
	public DataSource createDataSource() {
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		try {
			dataSource.setDriverClass("com.mysql.jdbc.Driver");
			dataSource.setJdbcUrl("jdbc:mysql://localhost/test");
			dataSource.setUser("root");
			dataSource.setPassword("root");
			dataSource.setInitialPoolSize(3);
			dataSource.setMaxPoolSize(6);
			dataSource.setMaxIdleTime(1000);
		} catch (PropertyVetoException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return dataSource;
	}
	
	@Test
	public void test1() {
		ComboPooledDataSource dataSource = (ComboPooledDataSource) createDataSource();
		try {
			QueryRunner run = new QueryRunner(dataSource);
			String sql = "update student set age= ? where userId = ?";
			//run.update(sql, new Random().nextInt(99)+1, 23);
			//run.update(sql, new Object[]{new Random().nextInt(99)+1, 23});
			//批量更新
			run.batch(sql, new Object[][]{{new Random().nextInt(99)+1, new Random().nextInt(29)+1},{new Random().nextInt(99)+1, new Random().nextInt(29)+1},{45,23},{12,7}});
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			dataSource.close();
		}
	}

	@Test
	public void test2() {
		ComboPooledDataSource dataSource = (ComboPooledDataSource) createDataSource();
		try {
			QueryRunner run = new QueryRunner(dataSource);
			String sql = "INSERT INTO student(userName,gender,age) VALUES(?,?,?)";
			//返回的结果集是Long类型
			long result = run.insert(sql, new ScalarHandler<Long>(), new Object[]{"张三", "m", 15});
			System.out.println(result);
			
			//批量插入
			List<Long> rs = run.insertBatch(sql, new ColumnListHandler<Long>(), new Object[][]{{"张杀死", "w", 33},{"张五", "a", 44},{"张六", "v", 55}});
			for (Long t : rs) {
				System.out.println(t);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			dataSource.close();
		}
	}
	
	@Test
	public void test3() {
		ComboPooledDataSource dataSource = (ComboPooledDataSource) createDataSource();
		try {			
			QueryRunner run = new QueryRunner(dataSource);
			String sql = "select * from student";
			//用于对结果集进行封装
			ResultSetHandler<List<Student>> rs = new BeanListHandler<Student>(Student.class);
			List<Student> result = run.query(sql, rs, 22);
			
			for (Student student : result) {
				System.out.println(student.getUserId());
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			dataSource.close();
		}
	}
	
}

关于结果集

单行数据处理:ScalarHandler、ArrayHandler、MapHandler、BeanHandler

多行数据处理:BeanListHandler、AbstractListHandler(ArrayListHandler 、

MapListHandler、ColumnListHandler)、AbstractKeyedHandler(KeyedHandler、

BeanMapHandler)

可供扩展的类:BaseResultSetHandler

Dbutils使用结果集的方法有query、insert、insertBatch三个。insert()和update()方法都能执行插入记录的sql语句,但是返回值有区别。前者执行后返回的是表中的插入行生成的主键值,后者返回的是受语句影响的行数。

© 著作权归作者所有

共有 人打赏支持
iborder
粉丝 4
博文 68
码字总数 48460
作品 0
揭阳
程序员
Python下访问MYSQL的方法总结

在Python下做过服务器开发的小伙伴对ORM技术一定都不陌生,ORM(Object-Relational Mapping),将关系数据库的表结构映射到对象上,隐藏了数据库操作背后的细节,简化了对数据操作的写法,使...

zwgdft ⋅ 2016/10/15 ⋅ 0

JavaWeb07-HTML篇笔记(四)

1.1 案例三:手动抽取一个DBUtils的工具类:1.1.1 需求: 每次进行JDBC的CURD的操作的时候,有很多的代码都是相似的.可以不可以抽取工具类.完成一些通用性的代码? 1.1.2 分析:1.1.2.1 技术分...

我是小谷粒 ⋅ 05/17 ⋅ 0

每个项目中,你必须知道的11个Java第三方类库。

Java第三方library ecosystem是一个很广阔的范畴。不久前有人撰文:每个项目中,你必须知道的11个Java第三方类库。 单元测试 1.DBUnit DBunit是一个基于junit扩展的数据库测试框架。它提供了...

thinkyoung ⋅ 2015/01/07 ⋅ 0

JavaWeb13-HTML篇笔记(二)

1.1.1.3 DBUtils实现事务管理: Ø 没有事务管理: Ø 有事务管理: 1.1.1 总结:1.1.1.1 事务特性: Ø 原子性:强调事务的不可分割. Ø 一致性:强调的是事务的执行的前后,数据的完整性要保持一...

我是小谷粒 ⋅ 05/29 ⋅ 0

一行代码搞定数据库操作 - ThinkJDBC

1 简介 ,又名,一个简洁而强大的开源JDBC操作库。你可以使用Java像框架的M方法一样,。 先睹为快: //数据库配置(只需调用一次)D.setDbConfig("jdbc:mysql://127.0.0.1:3306/DbName?charac...

Leytton ⋅ 04/21 ⋅ 0

Leytton/ThinkJD

中文文档 English Document 最新版本 V1.2.3 1 简介 ,又名,一个简洁而强大的开源JDBC操作库。你可以使用Java像框架的M方法一样,。 先睹为快: //数据库配置(只需调用一次)D.setDbConfig(...

Leytton ⋅ 04/21 ⋅ 0

JavaWeb09-HTML篇笔记(二)

1.1 案例一:使用Servlet完成一个用户登录的案例.1.1.1 需求: 在网站的首页上,登录的链接,点击登录的链接,可以跳转到登录的页面.在登录的页面中输入用户名和密码点击登录的案例.完成登录的功...

我是小谷粒 ⋅ 05/21 ⋅ 0

【CF 应用开发大赛】自定义收藏夹 && 小便笺 && 个人笔记

应用URL地址:http://sunlight.cloudfoundry.com (默认账号—用户:friends、密码:loveyou) 应用名称:自定义收藏夹 && 小便笺 && 个人笔记 (因为啥都不像,所以很难取名字) 应用说明及...

水牛叔叔 ⋅ 2013/01/05 ⋅ 26

mybatis 笔记 一

持久层框架mybatis jdbc->dbutils->Mybatis->hibernate mybatis:是把sql写在xml里,或者使用注解的方式写sql,还是对sql的操作,而hibernate是对象的操作。 dbutils:自动封装查询结果集(可...

AIting ⋅ 2016/11/27 ⋅ 0

centos服务器上jdbc无法获取Connection,搞到头大......

服务器环境:centos6.9, jdk1.8, tomcat8.5.20, mysql5.5 问题描述: 我的一个项目写好后在笔记本上运行正常, 部署到服务器后运行却出现异常, 经过调试发现是连接数据库出了问题, 项目中连接数...

iborder ⋅ 2017/09/19 ⋅ 21

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部