天天看點

JavaWeb之DButils(四)使用DBUtils實作增删查改

DBUtils是JDBC的簡化開發工具包

一、JavaBean元件

JavaBean就是一個元件,在開發中常用于封裝資料,有以下特性:

1.需要實作接口:java,io.Serializable(也可省略)

2.提供私有字段:private 類型 字段名;

3.提供get/set方法

4.提供無參構造

package com.shuhuadream.domain;

public class Sort {
	private int sid;
	private String sname;
	private double sprice;
	private String sdesc;
	public Sort(int sid, String sname, double sprice, String sdesc) {
		super();
		this.sid = sid;
		this.sname = sname;
		this.sprice = sprice;
		this.sdesc = sdesc;
	}
	
	public Sort(){}

	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public double getSprice() {
		return sprice;
	}

	public void setSprice(double sprice) {
		this.sprice = sprice;
	}

	public String getSdesc() {
		return sdesc;
	}

	public void setSdesc(String sdesc) {
		this.sdesc = sdesc;
	}

	@Override
	public String toString() {
		return "Sort [sid=" + sid + ", sname=" + sname + ", sprice=" + sprice + ", sdesc=" + sdesc + "]";
	}
	
}

           

二、DBUtils完成增删改查

1、概述

JavaWeb之DButils(四)使用DBUtils實作增删查改

2、QueryRunner核心類

JavaWeb之DButils(四)使用DBUtils實作增删查改

3、ResultSetHandle結果集處理類

JavaWeb之DButils(四)使用DBUtils實作增删查改
JavaWeb之DButils(四)使用DBUtils實作增删查改

4、DBUtils工具類

JavaWeb之DButils(四)使用DBUtils實作增删查改

三、測試DBUtils工具類 增删改操作,使用到QueryRunner類

package com.shuhuadream.queryrunner;

import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;

import com.shuhuadream.jdbc.utils01.C3P0Utils;

/*	測試DBUtils工具類 增删改操作
 *  使用QueryRunner類,實作對資料表的
 *  insert delete update
 *  調用QueryRunner類的方法 update (Connection con,String sql,Object...param)
 *  Object...param 可變參數,Object類型,SQL語句會出現?占位符
 *  資料庫連接配接對象,自定義的工具類傳遞
 */
public class QueryRunnerDemo {
	private static DataSource dataSource = C3P0Utils.getDataSource();
	
	//定義方法,使用QueryRunner類的方法delete将資料表的資料删除 
	@Test
	public void delete(){		
		try {
			//建立QueryRunner類對象
			QueryRunner qr = new QueryRunner(dataSource);	
			//寫删除的SQL語句
			String sql = "DELETE FROM sort WHERE sid=?";
			//調用QueryRunner方法update
			int row = qr.update(sql, 27);
			if(row>0){
				System.out.println("删除成功!");
			}else{
				System.out.println("删除失敗!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}	
	}
	
	//定義方法,使用QueryRunner類的方法update将資料表的資料修改
	@Test 
	public void update(){
		try {
			//建立QueryRunner類對象
			QueryRunner qr = new QueryRunner(dataSource);	
			//寫修改資料的SQL語句
			String sql = "UPDATE sort SET sname=?,sprice=?,sdesc=? WHERE sid=?";
			//定義Object數組,存儲?中的參數
			Object[] params = {"月餅",100.88,"中秋佳節月餅促銷",25};
			//調用QueryRunner方法update
			int row = qr.update(sql, params);
			if(row>0){
				System.out.println("修改成功!");
			}else{
				System.out.println("修改失敗!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	
	/*
	 * 定義方法,使用QueryRunner類的方法update向資料表中,添加資料
	 */
	@Test
	public void insert(){
		try {
			//建立QueryRunner類對象
			QueryRunner qr = new QueryRunner(dataSource);
			String sql = "INSERT INTO sort (sname,sprice,sdesc)VALUES(?,?,?)";
			//将三個?占位符的實際參數,寫在數組中
			Object[] params = {"體育用品",289.32,"購買體育用品"};
			//調用QueryRunner類的方法update執行SQL語句
			int row = qr.update(sql, params);
			if(row>0){
				System.out.println("資料添加成功!");
			}else{
				System.out.println("資料添加失敗!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
           

四、使用DBUtils運用QueryRunner資料進行查詢操作并使用ResultSetHandle結果集處理類處理結果集

package com.shuhuadream.queryrunner;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.dbutils.*;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
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.shuhuadream.domain.Sort;
import com.shuhuadream.jdbc.utils01.C3P0Utils;
/**
 * QueryRunner資料查詢操作
 * 	調用QueryRunner類方法query(Connection con,String sql,ResultSetHandler r,Object..params)
 * 		ResultSetHandler r 結果集的處理方式,傳遞ResultSetHandler接口實作類
 * 		Object...params sql語句的?占位符
 *  
 * 注意:query方法傳回值,傳回的是T 泛型,具體傳回值類型,跟随結果集處理方式變化
 * */
public class QueryRunnerDemo02 {
	private static DataSource dataSource = C3P0Utils.getDataSource();
	/**	
	 * 結果集第一種處理方法,ArrayHandler
	 * 将結果第一行存儲到對象數組中Object[]
	 * @throws SQLException 
	 * */
	
	public void ArrayHandler(){
		
		try {
			QueryRunner qr = new QueryRunner(dataSource);
			String sql = "SELECT * FROM sort";
			//調用query執行查詢,傳遞連接配接對象,SQL語句,結果集處理方式的實作類 
			//傳回對象數組		
			Object[] result = qr.query(sql,new ArrayHandler());
			for (Object obj : result) {
				System.out.println(obj);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}	
	}
	
	/**
	 * 結果集的第二種處理方法,ArrayListHandler
	 * 将結果集的每一行,封裝到對象數組中,出現很多對象數組
	 * 對象數組存儲到List集合
	 * @throws SQLException 
	 * */
	@Test
	public void arrayListHandler(){
		
		try {
			QueryRunner qr = new QueryRunner(dataSource);
			String sql  = "SELECT * FROM sort";
			//調用query方法,結果集處理的參數上,傳遞實作類ArrayListHandler
			//方法傳回值 每行是一個數組
			List<Object[]> result = qr.query(sql, new ArrayListHandler());
			//集合的周遊
			for (Object[] objs : result) {
				for (Object obj : objs) {
					System.out.print(obj+"\t");
				}
				System.out.println();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	/**
	 * 結果集的第三種處理方法BeanHandler
	 * 将結果集的第一行資料,封裝為JavaBean對象
	 * 注意:被封裝成資料到JavaBean對象,Sort類必須有空參構造
	 * @throws SQLException 
	 * */
	@Test
	public void beanHandler(){		
		try {
			QueryRunner qr = new QueryRunner(dataSource);
			String sql = "SELECT * FROM sort";
			//調用方法,傳遞結果集實作BeanHandler
			//BeanHandler(Class<T> type)
			Sort s = qr.query(sql,new BeanHandler<Sort>(Sort.class));
			System.out.println(s);
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	} 
	
	/**
	 * 結果集第四種處理方法,BeanListHandler
	 * 将資料結果集的每一行資料,封裝為JavaBean對象
	 * 多個JavaBean對象封裝到List集合中
	 * @throws SQLException 
	 * */
	@Test
	public void beanListHandler(){
		try {
			QueryRunner qr = new QueryRunner(dataSource);
			String sql = "SELECT * FROM sort";
			//調用方法傳遞結果集的實作類BeanListHandler
			//BeanListHandler(Class<T> type)
			List<Sort> list = qr.query(sql, new BeanListHandler<Sort>(Sort.class));
			for (Sort s : list) {
				System.out.println(s);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 結果集第五種處理方法,ColumnListHandler
	 * 結果集,指定列的資料,存儲到List集合中
	 * List<Object> 每個列資料類型不同
	 * @throws SQLException 
	 * */
	@Test
	public void columnListHandler(){
		try {
			QueryRunner qr = new QueryRunner(dataSource);
			String sql = "SELECT * FROM sort";
			//調用方法query,傳遞結果集實作類ColumnListHandler
			//實作類構造方法,使用字元串的列名		
			List<Object> list = qr.query(sql, new ColumnListHandler("sname"));
			for (Object obj : list) {
				System.out.println(obj);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 結果集第六種處理方法 ScalarHandler
	 * 對于查詢後,隻有一個結果
	 * @throws SQLException 
	 * */
	@Test
	public void scalarHandler(){	
		try {
			QueryRunner qr = new QueryRunner(dataSource);
			String sql = "SELECT COUNT(*) FROM sort";
			//調用方法query,傳遞結果集處理類ScalarHandler
			Object count = qr.query(sql,new ScalarHandler());
			System.out.println(count);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	
	}
	
	/**
	 * 結果集的第七種處理方式,MapHandler
	 * 将結果集第一行資料,封裝到Map集合中
	 * Map<鍵,值> 鍵:列名 值:這列資料
	 * @throws SQLException 
	 * */
	@Test
	public void mapHandler(){
		try {
			QueryRunner qr = new QueryRunner(dataSource);
			String sql = "SELECT * FROM sort";
			//調用方法query,傳遞結果集實作類MapHandler
			//傳回值:Map集合,Map接口實作類 泛型
			Map<String, Object> map = qr.query(sql,new MapHandler());
			for (String key : map.keySet()) {
				System.out.println(key+"..."+map.get(key));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}	
	}
	/**
	 * 結果集第八種處理方法,MapListHandler
	 * 将結果集每一行存儲到Map集合,鍵:列名 值:資料
	 * Map集合過多,存儲到List集合
	 * @throws SQLException 
	 * */
	@Test
	public void mapListHandler(){
		try {
			QueryRunner qr = new QueryRunner(dataSource);
			String sql = "SELECT * FROM sort";
			//調用方法query,傳遞結果集實作類MapListHander
			//傳回值List集合,存儲的是Map集合			
			List<Map<String, Object>> list = qr.query(sql,new MapListHandler());
			for (Map<String, Object> map : list) {
				for (String key : map.keySet()) {
					System.out.print(key+"..."+map.get(key));
				}
				System.out.println();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
           

該操作用到了上一篇筆記當中的 C3P0Utils工具類,實際開發當中建議使用C3P0Utils工具類

後記:每一天都是新的,學習路上加油