关于Java web基础知识

ResultSetHandler下的常用结果集

ResultSetHandler下的常用结果集封装

//ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]

//ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中

//ColumnListHandler:取某一列的数据。封装到List中。

//KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。

//MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中

//MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List

//ScalarHandler:适合取单行单列数据

BeanHandler:把每条记录封装成对象,适合取一条记录

BeanListHandler 把每条记录封装成对象,把对象存储到List集合中,适合取多条记录

接下来的文章我们会针对ResultSetHandler下的结果集处理器进行系统的案例分析,完成针对结果集的封装。

案例代码

1. MySQL数据库创建图书信息表

2. 创建Book.java javabean类 -->略

3. 建立CSP0连接池 -->略

4. 根据需求,使用指定的结果集获取数据结果

首先我们先介绍最常用的结果集:

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

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.junit.Test;

import com.qf.bean.Book;

import com.qf.utils.C3P0Utils;

public class Demo_Query {

//1.BeanHandler 把每条记录封装成对象 适合取一条记录

@Test

public void testQuery2(){

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

try {

Book b =

qr.query("select * from book where id=?", new BeanHandler<Book>(Book.class),1);

System.out.println(b);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//2.BeanListHandler 把每条记录封装成对象 将对象存储到List集合中

@Test

public void testQuery3(){

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

try {

List<Book> list =

qr.query("select * from book where id=? or id=?", new BeanListHandler<Book>(Book.class), 2,9);

System.out.println(list);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//3.ArrayHandler 适合取一条记录 把该记录的每一列值存储到一个数组中 Object[]

@Test

public void testQuery3() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Object[] arr = qr.query("select * from book where id=1", new ArrayHandler());

for(Object obj : arr){

System.out.println(obj);

}

}

//4.ArrayListHandler 适合取多条记录 把该记录的每一列值存储到一个数组中 Object[]然后把数组封装到集合中

@Test

public void testQuery4() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

List<Object[]> list = qr.query("select * from book", new ArrayListHandler());

for(Object[] obj:list){

for(Object o : obj){

System.out.print(o+",");

}

System.out.println();

}

}

//5.ColumnListHandler 获取某一列的数据 封装到List集合中

@Test

public void testQuery5() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

List<Object> list = qr.query("select * from book", new ColumnListHandler(2));//可以根据列号 从1开始 /列名

for(Object obj:list){

System.out.println(obj);

}

}

//6.MapHandler 适合取一条记录 把当前记录的列名 和 列值 放到一个Map中

@Test

public void testQuery6() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Map<String, Object> map = qr.query("select * from book where id=1", new MapHandler());

for(Map.Entry<String, Object> entry : map.entrySet()){

System.out.println(entry.getKey()+"::"+entry.getValue());

}

}

//7.KeyedHandler 取多条记录

//每条记录封装到Map中 再把Map封装到另一个Map中

// Map<key,Map<key,value>>

// 内Map :key字段名 value:字段值

// 外Map :key指定字段的值 value:内Map

//key 为指定的字段值

@Test

public void testQuery7() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Map<Object, Map<String,Object>> map = qr.query("select * from book", new KeyedHandler("id"));

for(Map.Entry<Object, Map<String,Object>> entry : map.entrySet()){

System.out.println(entry.getKey());

for(Map.Entry<String, Object> e : entry.getValue().entrySet()){

System.out.println(e.getKey()+";;;;"+e.getValue());

}

System.out.println("-------------");

}

}

//8.MapListHandler 适合取多条记录 把当前记录封装到Map中 再把Map封装到List中

@Test

public void testQuery8() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

List<Map<String, Object>>list = qr.query("select * from book", new MapListHandler());

for(Map<String, Object> map : list){

for(String key : map.keySet()){

System.out.println(key+";;;;"+map.get(key));

}

System.out.println("--------------");

}

}

//9.ScalarHandler 适合取单行单列数据

@Test

public void testQuery9() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Object obj = qr.query("select count(*) from book", new ScalarHandler());

System.out.println(obj);

}

}

以上代码是针对查询,给出的对应操作。当然,我们实际工作中不只有查询,还会涉及到一些增删改以及批量处理的功能。这时候我们就要使用QueryRunner类中的另外两个方法来完成了。他们分别是:

update() 用于执行insert update delete

batch() 批处理 可执行多条语句 批量

QueryRunner update()方法的使用 案例代码

package com.qf.dbutils;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;

import org.junit.Test;

import com.qf.utils.C3P0Utils;

//update()

public class Demo_Update {

@Test

public void testInsert01() throws SQLException{

//1.获取QueryRunner 对象

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "insert into book(name,price,num) values('html',10,12)";

qr.update(sql);

}

@Test

public void testInsert02() throws SQLException{

//1.获取QueryRunner 对象

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "insert into book(name,price,num) values(?,?,?)";

qr.update(sql, "photoshop",23,6);

}

@Test

public void testUpdate(){

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "update book set price=? where id=1";

try {

qr.update(sql,80);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Test

public void testDelete() throws SQLException{

//1.获取QueryRunner 对象

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "delete from book where id=13";

qr.update(sql);

}

@Test

public void testDelete2() throws SQLException{

//1.获取QueryRunner 对象

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "delete from book where name like ?";

qr.update(sql,"%java%");

}

}

QueryRunner batch()方法的使用 案例代码

package com.qf.dbutils;

import java.sql.SQLException;

import java.util.Arrays;

import org.apache.commons.dbutils.QueryRunner;

import org.junit.Test;

import com.qf.utils.C3P0Utils;

public class Demo_Batch {

/*

* batch() 方法 是批量处理

* 所需要的参数包括一个二维数组

* Object[][] params = new Object[5][]; 高维 的数 5 决定是执行sql语句的次数

* 低维数组的元素 就是给 sql语句 ? 赋值的

* */

@Test

public void testBatchInsert() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

//batch方法 第二个参数 是一个二维数组 所以 我们先创建一个二维数组

Object[][] params = new Object[5][];

//给二维数组中 每一个一维数组的元素 进行赋值

for(int i=0;i<params.length;i++){

params[i] = new Object[]{"html",22,39};

}

int[] arr = qr.batch("insert into book(name,price,num) values(?,?,?)", params);

System.out.println(Arrays.toString(arr));

}

@Test

public void testBatchDelete() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Object[][] params = new Object[3][];

for(int i=0;i<params.length;i++){

params[i] = new Object[]{i};

}

qr.batch("delete from book where id=?", params);

}

}

猜你喜欢

转载自www.cnblogs.com/qfdsj/p/9145703.html