1.c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config> <named-config name="helloc3p0"> <!-- 指定连接数据源的基本属性 -->
<property name="user">root</property>
<property name="password"></property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///filter</property> <!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
<property name="acquireIncrement"></property>
<!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize"></property>
<!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize"></property>
<!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize"></property> <!-- C3P0 数据库连接池可以维护的 Statement 的个数 -->
<property name="maxStatements"></property>
<!-- 每个连接同时可以使用的 Statement 对象的个数 -->
<property name="maxStatementsPerConnection"></property> </named-config> </c3p0-config>

2.test

package com.pers.test;/**
* Created by hoobey on 2017/11/18.
*/ import org.apache.commons.dbutils.QueryLoader;
import org.junit.Test; import java.io.IOException;
import java.util.Map; /**
* All rights Reserved, Designed By www.hoobey.cn
*
* @Description: 测试用例(用一句话描述该文件做什么)
* Create by hoobey
* User:user
* Date:2017/11/18
* Time:下午 04:51
* 注意:本内容仅限于本公司内部传阅,禁止外泄以及用于其他的商业目的
*/
public class test {
/**
* QueryLoader: 可以用来加载存放着 SQL 语句的资源文件.
* 使用该类可以把 SQL 语句外置化到一个资源文件中. 以提供更好的解耦
*
* @throws IOException
*/
@Test
public void testQueryLoader() throws IOException {
// / 代表类路径的根目录.
Map<String, String> sqls = QueryLoader.instance().load("/sql.properties"); String updateSql = sqls.get("UPDATE_CUSTOMER");
//UPDATE_CUSTOMER=UPDATE customer SET name = ? WHERE id = ?
System.out.println(updateSql);
}
}

3.Del.java

package com.pers.test;/**
* Created by hoobey on 2017/11/18.
*/ import com.pers.util.JdbcTools;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test; import java.sql.Connection; /**
* All rights Reserved, Designed By www.hoobey.cn
*
* @Description: (用一句话描述该文件做什么)
* Create by hoobey
* User:user
* Date:2017/11/18
* Time:下午 05:04
* 注意:本内容仅限于本公司内部传阅,禁止外泄以及用于其他的商业目的
*/
public class Del {
/**
* 测试 QueryRunner 类的 update 方法
* 该方法可用于 INSERT, UPDATE 和 DELETE
*/
@Test
public void testQueryRunnerUpdate() {
//1. 创建 QueryRunner 的实现类
QueryRunner queryRunner = new QueryRunner(); String sql = "DELETE FROM customer " +
"WHERE id IN (?,?)"; Connection connection = null; try {
connection = JdbcTools.getConnection();
//2. 使用其 update 方法
int update = queryRunner.update(connection,
sql, , );
System.out.println("update:" + update);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, connection);
} }
}

4.query.java

package com.pers.test;/**
* Created by hoobey on 2017/11/18.
*/ import com.pers.domain.Customer;
import com.pers.util.JdbcTools;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test; import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map; /**
* All rights Reserved, Designed By www.hoobey.cn
*
* @Description: 通过QueryRunner实现增删改查(用一句话描述该文件做什么)
* Create by hoobey
* User:user
* Date:2017/11/18
* Time:下午 04:59
* 注意:本内容仅限于本公司内部传阅,禁止外泄以及用于其他的商业目的
*/
public class Query {
/**
* 测试 QueryRunner 的 query 方法
*/
@SuppressWarnings({"unchecked", "rawtypes"})
@Test
public void testResultSetHandler() {
String sql = "SELECT id, name, email, birth from customer"; //1. 创建 QueryRunner 对象
QueryRunner queryRunner = new QueryRunner(); Connection conn = null; try {
conn = JdbcTools.getConnection();
/**
* 2. 调用 query 方法:
* ResultSetHandler 参数的作用: query 方法的返回值直接取决于
* ResultSetHandler 的 hanlde(ResultSet rs) 是如何实现的. 实际上, 在
* QueryRunner 类的 query 方法中也是调用了 ResultSetHandler 的 handle()
* 方法作为返回值的。
*/
Object object = queryRunner.query(conn, sql,
new ResultSetHandler() {
@Override
public Object handle(ResultSet rs) throws SQLException {
List<Customer> customers = new ArrayList<>(); while (rs.next()) {
int id = rs.getInt();
String name = rs.getString();
String email = rs.getString();
Date birth = rs.getDate(); System.out.println(id + "," + name + "," + email + "," + birth);
Customer customer =
new Customer(id, name, email, birth);
customers.add(customer);
} return customers;
}
} );
/*
0,hello,hu@qq.com,2017-11-16
1,hubin,122@qq.com,2017-10-18
2,xiaomi,77@163.com,2017-08-15
[Customer{id=0, name='hello', email='hu@qq.com', birth=2017-11-16}, Customer{id=1, name='hubin', email='122@qq.com', birth=2017-10-18},
Customer{id=2, name='xiaomi', email='77@163.com', birth=2017-08-15}]
*/
System.out.println(object);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, conn);
}
} /**
* 测试 ResultSetHandler 的 BeanListHandler 实现类
* BeanListHandler: 把结果集转为一个 Bean 的 List. 该 Bean
* 的类型在创建 BeanListHandler 对象时传入:
* <p>
* new BeanListHandler<>(Customer.class)
*/
@Test
public void testBeanListHandler() {
String sql = "SELECT id, name, email, birth FROM customer"; //1. 创建 QueryRunner 对象
QueryRunner queryRunner = new QueryRunner(); Connection conn = null; try {
conn = JdbcTools.getConnection(); Object object = queryRunner.query(conn, sql, new BeanListHandler<>(Customer.class));
//[Customer{id=0, name='hello', email='hu@qq.com', birth=2017-11-16}, Customer{id=1, name='hubin', email='122@qq.com',
// birth=2017-10-18}, Customer{id=2, name='xiaomi', email='77@163.com', birth=2017-08-15}]
System.out.println(object); ArrayList<Customer> customers = (ArrayList<Customer>) object;
for (int i = ; i < customers.size(); i++) {
Customer customer = customers.get(i);
System.out.println(customer.getName());//hello hubin xiaomi
} } catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, conn);
}
} /**
* BeanHandler: 把结果集的第一条记录转为创建 BeanHandler 对象时传入的 Class 参数对应的对象.
*/ @Test
public void testBeanHanlder() {
QueryRunner queryRunner = new QueryRunner();
Connection connection = null; try {
connection = JdbcTools.getConnection();
String sql = "SELECT id, name, email, birth FROM customer WHERE name = ?"; Customer customer = (Customer)queryRunner.query(connection, sql, new BeanHandler(Customer.class),"hello"); System.out.println(customer.toString());//Customer{id=0, name='hello', email='hu@qq.com', birth=2017-11-16}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null,null,connection);
}
} /*
4、通过MapHandler、MapListHandler实现查询操作
*/
@Test
public void testMapHandler() {
Connection connection = null;
QueryRunner queryRunner = new QueryRunner(); String sql = "SELECT id, name, email, birth FROM customer WHERE id = ?"; try {
connection = JdbcTools.getConnection();
Map<String, Object> map = (Map<String, Object>)queryRunner.query(connection, sql, new MapHandler(), ); System.out.println(map);//{name=xiaomi, birth=2017-08-15, id=2, email=77@163.com}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, connection);
}
} @Test
public void testMapListHandler() {
Connection connection = null;
QueryRunner queryRunner = new QueryRunner(); String sql = "SELECT id, name, email, birth " +
"FROM customer"; try {
connection = JdbcTools.getConnection();
List<Map<String, Object>> mapList = queryRunner.query(connection, sql, new MapListHandler());
System.out.println(mapList);
/*
[{name=hello, birth=2017-11-16, id=0, email=hu@qq.com}, {name=hubin, birth=2017-10-18, id=1, email=122@qq.com}, {name=xiaomi,birth=2017-08-15, id=2, email=77@163.com}] */
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, connection);
}
} /*
5、通过ScalarHandler实现查询操作
*/
@Test
public void testScalarHandler() {
Connection connection = null;
QueryRunner queryRunner = new QueryRunner();
String sql = "SELECT name FROM customer WHERE id = ?";
try {
connection = JdbcTools.getConnection();
Object count = queryRunner.query(connection, sql,new ScalarHandler(), );
System.out.println(count);//xiao 查看的是id=2的顾客姓名
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, connection);
}
}
//6、通过ArrayHandler\ArrayListHandler实现查询操作
/*
* 结果集第二种处理方法,ArrayListHandler
* 将结果集的每一行,封装到对象数组中, 出现很多对象数组
* 对象数组存储到List集合
*/
public static void arrayListHandler() throws Exception {
Connection con = JdbcTools.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM customer";
//调用query方法,结果集处理的参数上,传递实现类ArrayListHandler
//方法返回值 每行是一个对象数组,存储到List
List<Object[]> result = qr.query(con, sql, new ArrayListHandler()); //集合的遍历
for (Object[] objs : result) {
//遍历对象数组
for (Object obj : objs) {
System.out.print(obj + " ");
}
System.out.println();
/*
0 hello hu@qq.com 2017-11-16
1 hubin 122@qq.com 2017-10-18
2 xiaomi 77@163.com 2017-08-15
*/
}
} /* * 结果集第一种处理方法, ArrayHandler
* 将结果集的第一行存储到对象数组中 Object[]
*/
public static void arrayHandler() throws Exception {
Connection con = JdbcTools.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM customer";
//调用方法query执行查询,传递连接对象,SQL语句,结果集处理方式的实现类
//返回对象数组
Object[] result = qr.query(con, sql, new ArrayHandler());
for (Object obj : result) {
System.out.print(obj+"\t");//0 hello hu@qq.com 2017-11-16
}
}
public static void main(String[] args) throws Exception {
// new Query().arrayHandler();
new Query().arrayListHandler();
} }

QueryRunner实战(query_update)、BeanList\BeanHandler、MapList\MapHandler、ScalarHandler的更多相关文章

  1. dbutils使用---QueryRunner、BeanListHandler、BeanHandler、MapListHandler、MapHandler、ScalarHandler

    1. ResultSetHandler 的作用: QueryRunner 的 query 方法的返回值最终取决于 query 方法的 ResultHandler 参数的 hanlde 方法的返回值. ...

  2. 5_项目实战MyShop

    一. 网上商城 1.1 商城类别 B2B 商家对商家 B2C 商家对客户 C2C 客户对客户 O2O 线上线下相结合 1.2 商城常见模块 后台常见功能模块 商品管理 包括后台商品库存管理, 上货, ...

  3. QueryRunner使用

    在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——D ...

  4. QueryRunner的使用

    在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——D ...

  5. QueryRunner类的八种结果处理集

    package cn.jy.demo; import java.sql.Connection; import java.sql.SQLException; import java.util.List; ...

  6. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  7. QueryRunner 结果处理器

    package cn.itcast.dbutil; import java.sql.SQLException; import java.util.List; import java.util.Map; ...

  8. QueryRunner

    在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,xx给我们详尽介绍了一个简化JDBC操作的组件——D ...

  9. 【转载】JavaWeb之DBUtils QueryRunner类对数据表的增、删、查(8种结果集处理方式)、改操作

    一.使用QueryRunner类,实现对数据表的 insert delete update package com.shuhuadream.queryrunner; import java.sql.C ...

随机推荐

  1. python 全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)

    昨日内容回顾 进程 multiprocess Process —— 进程 在python中创建一个进程的模块 start daemon 守护进程 join 等待子进程执行结束 锁 Lock acqui ...

  2. JAVA开发工程师面试(1)

    我已经有很长一段时间没有更新博客了,难道是博主我变懒惰了吗?哎,这样可不行啊,我还有好多知识要学习,要和大家分享.以后我需要更加努力,改掉自己的惰性.本人文采不怎么样,只能是把自己所想的说出来,想和大 ...

  3. 微服务的发现与注册--Eureka

    目录 服务提供者.服务消费者.服务发现组件三者之间的关系 Eureka 简介 Eureka Server Eureka Client 编写Eureka Server 将微服务注册到Eureka Ser ...

  4. 矩阵优化dp

    链接:https://www.luogu.org/problemnew/show/P1939 题解: 矩阵优化dp模板题 搞清楚矩阵是怎么乘的构造一下矩阵就很简单了 代码: #include < ...

  5. 关于C#资源文件的相关操作

    关于资源文件的相关操作. //1.比较常见的有获取资源文件对应的文件流,然后转换到相对应的文件 //比较典型的做法是通过代码程序集加载指定资源 //如下通过Assembly的静态方法GetExecut ...

  6. K-means聚类算法及python代码实现

    K-means聚类算法(事先数据并没有类别之分!所有的数据都是一样的) 1.概述 K-means算法是集简单和经典于一身的基于距离的聚类算法 采用距离作为相似性的评价指标,即认为两个对象的距离越近,其 ...

  7. hdu 1686 Oulipo 【KMP】(计算模式串匹配的次数——与已匹配的字串可以有交集)

    题目链接:https://vjudge.net/contest/220679#problem/B 题目大意: 输入一个T,表示有T组测试数据: 每组测试数据包括一个字符串W,T,T长度大于W小于100 ...

  8. tensorflow 使用CPU而不使用GPU的问题解决

    今天发现一个怪现象,在训练keras时,发现不使用GPU进行计算,而是采用CPU进行计算,导致计算速度很慢. 用如下代码可检测tensorflow的能使用设备情况: from tensorflow.p ...

  9. spring中整合ssm框架注解版

    和xml版差不多,只不过创建对象的方式是由spring自动扫描包名,然后命名空间多一行context代码在application.xml中,然后将每个对象通过注解创建和注入: 直接上代码: 1.use ...

  10. mysql 用户/密码/权限操作

    由于最近使用mysql遇到了修改用户密码的问题,所以一块学习了一下关于用户的相关操作: 1. 创建新账户 CREATE USER 'jeffrey'@'localhost'; 2. 账户设置密码 #当 ...