Apache-DBUtils实现CRUD操作,commmons-dbutils是Apache组织提供的开源JDBC工具类,

封装了针对于数据库的增删改查操作,Class QueryRunner

TestQueryRunner

package com.aff.util;
import java.sql.Connection;
import java.sql.Date;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import com.aff.bean.Customer;
//commmons-dbutils是Apache组织提供的一个开源的jdbc工具类库,
//封装了针对于数据库的增删改查操作
public class TestQueryRunner {
// 测试插入
@Test
public void testInsert() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtilsDruid.getConnection();
String sql = "insert into customers (name,email,birth)values(?,?,?)";
runner.update(conn, sql, "蔡徐坤", "cxk@126.com", "1997-2-24");
System.out.println("添加成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtilsDruid.closeResource(conn, null, null);
}
} // 测试查询
// ResultSetHandler 是个接口
// BeanHander是ResultSetHandler接口的实现类,用于封装表中的一条记录
@Test
public void testQuery1() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtilsDBCP.getConnection();
String sql = "select id,name,birth from customers where id =?";
BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);
Customer customer = runner.query(conn, sql, handler, 20);
System.out.println(customer);
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtilsDBCP.closeResource(conn, null, null);
}
} // BeanListHander是ResultSetHandler接口的实现类,用于封装表中的多条记录构成的集合
@Test
public void testQuery2() throws Exception {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtilsC3P0.getConnection();
String sql = "select id,name,birth from customers where id <?";
BeanListHandler<Customer> handler = new BeanListHandler<>(Customer.class);
List<Customer> list = runner.query(conn, sql, handler, 20);
list.forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtilsC3P0.closeResource(conn, null, null);
}
} // MapHander是ResultSetHandler接口的实现类,对应表中的一条记录
// 将字段及相应字段的值作为map中的key和value
// 键--值 键--值 体现 key-value
// {name=何苗苗, birth=1996-02-03, id=20}
@Test
public void testQuery3() throws Exception {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtilsC3P0.getConnection();
String sql = "select id,name,birth from customers where id =?";
MapHandler handler = new MapHandler();
Map<String, Object> map = runner.query(conn, sql, handler, 20);
System.out.println(map);
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtilsC3P0.closeResource(conn, null, null);
}
} // MapListHander是ResultSetHandler接口的实现类,对应表中的多条记录
// 将字段及相应的值作为map中的key和value,将这些map添加到list中
@Test
public void testQuery4() throws Exception {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtilsC3P0.getConnection();
String sql = "select id,name,birth from customers where id <?";
MapListHandler listHandler = new MapListHandler();
List<Map<String, Object>> list = runner.query(conn, sql, listHandler, 20);
list.forEach(System.out::println);
/*
{name=朱茵, birth=2014-01-16, id=16}
{name=何苗, birth=2014-01-17, id=18}
{name=芳芳, birth=1996-03-04, id=19}
*/
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtilsC3P0.closeResource(conn, null, null);
}
} //
// ScalarHandler是ResultSetHandler接口的实现类, 用于查询特殊值
//返回表中的记录数
@Test
public void testQuery5() throws Exception {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtilsC3P0.getConnection();
String sql = "select count(*) from customers";
ScalarHandler handler = new ScalarHandler();
Long count = (Long) runner.query(conn, sql, handler);
System.out.println(count);
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtilsC3P0.closeResource(conn, null, null);
}
}
// ScalarHandler是ResultSetHandler接口的实现类,
//返回表中的最大出生日期
@Test
public void testQuery6() throws Exception {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtilsC3P0.getConnection();
String sql = "select max(birth) from customers";
ScalarHandler handler = new ScalarHandler();
Date maxBirth = (Date) runner.query(conn, sql, handler);
System.out.println(maxBirth);
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtilsC3P0.closeResource(conn, null, null);
}
}
}

使用Dbutils关闭资源

例如:

JDBCUtilsC3P0

package com.aff.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import org.apache.commons.dbutils.DbUtils; import com.mchange.v2.c3p0.ComboPooledDataSource; //使用C3P0数据库连接池
public class JDBCUtilsC3P0 {
// 把池子拿到外边,连接池一个就够,需要的连接从池子中拿
private static ComboPooledDataSource cbpds = new ComboPooledDataSource("helloc3p0"); public static Connection getConnection() throws SQLException {
Connection conn = cbpds.getConnection();
return conn;
}
public static void closeResource(Connection conn, PreparedStatement ps, ResultSet rs) {
// 7.资源的关闭
DbUtils.closeQuietly(conn);
DbUtils.closeQuietly(ps);
DbUtils.closeQuietly(rs);
}
}

QueryRunner的添加与查询操作的更多相关文章

  1. MongoDB的查询操作

    1. 前言 在这篇博文中,我们将学习如何查询mongoDB中的数据.当我们把数据存储在mongoDB以后,我们需要把数据查询出来.毕竟CRUD操作中,查询操作在我们系统中是我们应用比较频繁的操作.我们 ...

  2. Django 1.10 中文文档------3.2.2 查询操作making queries

    3.2.2 查询操作 6.15章节包含所有模型相关的API解释. 后面的内容基于如下的一个博客应用模型: from django.db import models class Blog(models. ...

  3. MongoDB各种查询操作详解

    这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下   一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...

  4. MySQL(三) 数据库表的查询操作【重要】

    序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VARCHAR.BLOB,等), 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对 ...

  5. mongodb_查询操作使用_条件查询、where子句等(转)

    <?php /*  mongodb_查询操作使用_条件查询.where子句等(转并学习)   1.find()/findOne() mongodb数据库的查询操作即使用find()或者findO ...

  6. OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

    公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...

  7. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. MongoDB源码分析——mongod数据查询操作

    源码版本为MongoDB 2.6分支 Edit mongod数据查询操作 在mongod的初始化过程中说过,服务端接收到客户端消息后调用MyMessageHandler::process函数处理消息. ...

  9. 基于jsp+servlet图书管理系统之后台用户信息查询操作

    上一篇的博客写的是插入操作,且附有源码和数据库,这篇博客写的是查询操作,附有从头至尾写的代码(详细的注释)和数据库! 此次查询操作的源码和数据库:http://download.csdn.net/de ...

随机推荐

  1. 题解 CF545A 【Toy Cars】

    题目传送门 太弱了,只能写写A题的题解 题意 给你一个 $n·n$ 的矩阵,翻车分三种情况: 如果 $a_i,_j=1$ ,记录第 $i$ 辆车 如果 $a_i,_j=2$ ,记录第 $j$ 辆车 如 ...

  2. Hadoop-wordCount实例代码编写(Hadoop学习第四天)

    1.新建一个maven项目2.pom文件中引入以下jar包<dependency> <groupId>org.apache.hadoop</groupId> < ...

  3. leetcode485——最大连续1的个数(easy)

    一.题目描述 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意 ...

  4. Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?

    大家好,这是"Python为什么"系列节目的文字稿(文末有观看地址). 本期话题:Python 为什么使用缩进来划分代码块,而不像其它语言使用花括号 {} 或者 "end ...

  5. 【FreeRTOS学习03】小白都能懂的Task Management 任务管理基本概念介绍

    在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级: 1 软实时和硬实时 硬实时系统的任务运行正确性与响应时限是紧密相关的 ...

  6. Scala 中 Any 类源码

    package scalaabstract class Any { def equals(that: Any): Boolean //值比较 def hashCode(): Int //hash值 d ...

  7. C语言进阶_goto与void解析

    世间真正温煦的春色,都熨帖者大地,潜伏在深谷. 一.简介 goto与void是两个不常用的关键字,C语言中的Goto关键字传承字汇编语言,使用方法也与汇编语言相同.void是类型关键字,可修饰函数和变 ...

  8. [hdu5313]二分图性质,dp

    题意:给定二分图,求添加的最多边数,使得添加之后还是二分图 思路:如果原图可以分成X,Y两个点集,那么边数最多为|X||Y|条.由于|X|+|Y|==n,所以需要使|X|与|Y|尽量接近.先对原图进行 ...

  9. java ->IO流_字符流

    字符流 经过前面的学习,我们基本掌握的文件的读写操作,在操作过程中字节流可以操作所有数据,可是当我们操作的文件中有中文字符,并且需要对中文字符做出处理时怎么办呢? 字节流读取字符的问题 通过以下程序读 ...

  10. IDEA图标大全

      IntelliJ IDEA 2019.3版本以来各种小图标的含义 Common Icon Description Class Abstract class Groovy class Annotat ...