数据库dbutils
common-dbutils.jar
QueryRunner
update方法:
* int update(String sql, Object... params) --> 可执行增、删、改语句
* int update(Connection con, String sql, Object... parmas) --> 需要调用者提供Connection,这说明本方法不再管理Connection了。支持事务!
query方法:
* T query(String sql, ResultSetHandler rsh, Object... params) --> 可执行查询
> 它会先得到ResultSet,然后调用rsh的handle()把rs转换成需要的类型!
* T query(Connection con, String sql, ResultSetHadler rsh, Object... params),支持事务
ResultSetHandler接口:
* BeanHandler(单行) --> 构造器需要一个Class类型的参数,用来把一行结果转换成指定类型的javaBean对象
* BeanListHandler(多行) --> 构造器也是需要一个Class类型的参数,用来把一行结果集转换成一个javabean,那么多行就是转换成List对象,一堆javabean
* MapHandler(单行) --> 把一行结果集转换Map对象
> 一行记录:
sid sname age gender
1001 zs 99 male
> 一个Map:
{sid:1001, sname:zs, age:99, gender:male}
* MapListHandler(多行) --> 把一行记录转换成一个Map,多行就是多个Map,即List<Map>!
* ScalarHandler(单行单列) --> 通常用与select count(*) from t_stu语句!结果集是单行单列的!它返回一个Object
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码:
public void fun1() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "insert into t_stu values(?,?,?,?)";
Object[] params = {1002, "liSi", 88, "female"};
qr.update(sql, params);
}
@Test
public void fun2() throws SQLException {
// 创建QueryRunner,需要提供数据库连接池对象
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
// 给出sql模板
String sql = "select * from t_stu where sid=?";
// 给出参数
Object[] params = {1001};
// 执行query()方法,需要给出结果集处理器,即ResultSetHandler的实现类对象
// 我们给的是BeanHandler,它实现了ResultSetHandler
// 它需要一个类型,然后它会把rs中的数据封装到指定类型的javabean对象中,然后返回javabean
Stu stu = qr.query(sql, new BeanHandler<Stu>(Stu.class), params);
System.out.println(stu);
}
/**
* BeanListHandler的应用,它是多行处理器
* 每行对象一个Stu对象!
* @throws Exception
*/
@Test
public void fun3() throws Exception {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "select * from t_stu";
List<Stu> stuList = qr.query(sql, new BeanListHandler<Stu>(Stu.class));
System.out.println(stuList);
}
/**
* MapHandler的应用,它是单行处理器,把一行转换成一个Map对象
* @throws SQLException
*/
@Test
public void fun4() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "select * from t_stu where sid=?";
Object[] params = {1001};
Map map = qr.query(sql, new MapHandler(), params);
System.out.println(map);
}
/**
* MapListHandler,它是多行处理器,把每行都转换成一个Map,即List<Map>
* @throws SQLException
*/
@Test
public void fun5() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "select * from t_stu";
List<Map<String,Object>> mapList = qr.query(sql, new MapListHandler());
System.out.println(mapList);
}
/**
* ScalarHandler,它是单行单列时使用,最为合适!
* @throws SQLException
*/
@Test
public void fun6() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "select count(*) from t_stu";
/*
* Integer、Long、BigInteger
*/
Number cnt = (Number)qr.query(sql, new ScalarHandler());
long c = cnt.longValue();
System.out.println(c);
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------
增、删、改
public void fun1() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "insert into user values(?,?,?)";
qr.update(JdbcUtils.getConnection(), sql, "u1", "zhangSan", "123");
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------
查
DataSource ds = JdbcUtils.getDataSource();
QueryRunner qr = new QueryRunner(ds);
String sql = "select * from tab_student"; // 把结果集转换成Bean
Student stu = qr.query(sql, new BeanHandler<Student>(Student.class)); // 把结果集转换成Bean的List
List<Student> list = qr.query(sql, new BeanListHandler<Student>(Student.class)); // 把结果集转换成Map
Map<String,Object> map = qr.query(sql, new MapHandler()); // 把结果集转换成List<Map>
List<Map<String,Object>> list = qr.query(sql, new MapListHandler() ); // 把结果集转换成一列的List
List<Object> list = qr.query(sql, new ColumnListHandler("name")) ; // 把结果转换成单行单列的值
Number number = (Number)qr.query(sql, new ScalarHandler());
批处理
DataSource ds = JdbcUtils.getDataSource();
QueryRunner qr = new QueryRunner(ds);
String sql = "insert into tab_student values(?,?,?,?)";
Object[][] params = new Object[10][]; //表示 要插入10行记录
for(int i = 0; i < params.length; i++) {
params[i] = new Object[]{"S_300" + i, "name" + i, 30 + i, i%2==0?"男":"女"};
}
qr.batch (sql, params); -
数据库dbutils的更多相关文章
- 数据库——DBUtils和连接池
第一章 DBUtils如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简 ...
- 数据库DBUtils基本使用
Apache-DBUtils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,使用dbutils能极大简化jdbc编码的工作量,同 ...
- 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 ...
随机推荐
- GitHub 上下载代码运行报错 :'The sandbox is not sync with the Podfile.lock\'
问题描述: github下载的Demo,很多时候使用到CocoaPods,有的时候因为依赖关系或者版本问题不能编译运行.出现例如The sandbox is not sync with the Pod ...
- git clone 远程仓库报错error setting certificate verify locations
系统:windows10 今天从github上克隆项目时报错: 原因: 1.git配置没有修改 之前配置的是公司gitlab账号的信息,和我当前要克隆的github的配置信息不同,没有注意修改 2.执 ...
- Codeforces 719B Anatoly and Cockroaches
B. Anatoly and Cockroaches time limit per test:1 second memory limit per test:256 megabytes input:st ...
- 搜查的PHPCMS,织梦DEDECMS 部分对比分析
对于初学者来说,我想会有相对的了解和认识,自然也有助于今后前端面试的一些小细节!当下学的自然是phpcms phpcms优点: 1. 模块化安装,非常适合安装,拆卸非常方便的. 2. 灵活的标签语法, ...
- 安装和配置Symfony
为了简化创建新项目的过程,Symfony提供一个安装程序. 安装Symfony Installer 使用Symfony Installer是创建新的Symfony项目的唯一推荐方式,这个install ...
- weex官方demo weex-hackernews代码解读(下)
weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.而weex-hacknews则是weex官方出品的,首个使用 Weex 和 Vu ...
- ERP免费模拟上线
为了让更多中小企业在应用管理软件之前可以评估企业执行力和规避实施风险,普实在云端部署了AIO5的试用环境,免费供大家导入实际数据进行学习和测试.因资源有限,申请要求如下: 1.填写申请信息并加盖公章: ...
- Session分布式共享 = Session + Redis + Nginx
一.Session 1.Session 介绍 我相信,搞Web开发的对Session一定再熟悉不过了,所以我就简单的介绍一下. Session:在计算机中,尤其是在网络应用中,称为"会话控制 ...
- SQL Server-字字珠玑,一纸详文,完全理解SERIALIZABLE最高隔离级别(基础系列收尾篇)
前言 对于上述锁其实是一个老生常谈的话题了,但是我们是否能够很明确的知道在什么情况下会存在上述各种锁类型呢,本节作为SQL Server系列末篇我们 来详细讲解下. Range-Lock 上述关于Ra ...
- 图片流量节省大杀器:基于腾讯云CDN的sharpP自适应图片技术实践
目前移动端运营素材大部分依赖图片,基于对图片流量更少,渲染速度更快的诉求,我们推动CDN,X5内核,即通产品部共同推出了一套业务透明,无痛接入的CDN图片优化方案:基于CDN的sharpP自适应图片无 ...