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. Django项目部署在Linux下以进程方式启动

    Django项目部署在Linux下以进程方式启动 这是一篇关于如何在linux下,以后台进程的方式运行服务,命令改改基本上就通用了. 开发完Django项目后,需要把项目部署到linux环境下.当然, ...

  2. find算法

     find(beg, end, val)  :根据equal操作符,循序查找[first, last)内所有的元素,找出第一个匹配“等同条件者”.如果找到,就返回一个指向钙元素的迭代器,否者返回迭代器 ...

  3. struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化

    其实学习框架,就是为了可以很好的很快的完成我们的需求,而学习struts2只是为了替代之前用的servlet这一层,框架使开发更加简单,所以作为一个小菜鸟,特别感谢那些超级无敌变态开发的框架供我们使用 ...

  4. SQL行装列PIVOT和列转行UNPIVOT

    数据 CREATE TABLE student( no int, ca ), name ), subject ), scorce int ); /* 数据 */ , ); , ); , ); , ); ...

  5. kafka 数据存储结构+原理+基本操作命令

    数据存储结构: Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的.每个topic又可以分成几个不同的partition(每个topic有几个partitio ...

  6. 【AtCoder】Yahoo Programming Contest 2019

    A - Anti-Adjacency K <= (N + 1) / 2 #include <bits/stdc++.h> #define fi first #define se se ...

  7. python单例模式的实现

    1 线程不安全的单例模式 # -*- coding:utf-8 -*- from __future__ import unicode_literals import functools def sin ...

  8. layer弹框插件使用

    需要在jquery之后导入 <link rel="stylesheet" href="${pageContext.request.contextPath }/js/ ...

  9. Codeforces 247D Mike and Fish

    Mike and Fish 我们可以把这个模型转换一下就变成有两类点,一类是X轴, 一类是Y轴, 每个点相当于对应的点之间建一条边, 如果这条边变红两点同时+1, 变蓝两点同时-1. 我们能发现这个图 ...

  10. 《Gradle权威指南》--Gradle插件

    No1: 应用插件 apply plugin:'java' apply plugin:org.gradle.api.plugins.JavaPlugin apply plugin:JavaPlugin ...