1. 程式人生 > >【java基礎:JDBC】基於DBUtils工具類查詢資料庫的8種方式!非常重要!

【java基礎:JDBC】基於DBUtils工具類查詢資料庫的8種方式!非常重要!

package cn.itcast.demo2;

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

import org.apache.commons.dbutils.QueryRunner;
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 cn.itcast.domain.Sort;
import cn.itcast.jdbcutil.JDBCUtilsConfig;

/*
 * QueryRunner資料查詢操作:
 *   呼叫QueryRunner類方法query(Connection con,String sql,ResultSetHandler r, Object..params)
 *   ResultSetHandler r 結果集的處理方式,傳遞ResultSetHandler介面實現類
 *   Object..params SQL語句中的?佔位符
 *   
 *   注意: query方法返回值,返回的是T 泛型, 具體返回值型別,跟隨結果集處理方式變化
 */
public class QueryRunnerDemo1 {
	private static Connection con = JDBCUtilsConfig.getConnection();
	public static void main(String[] args) throws SQLException{
//		arrayHandler();
//		arrayListHandler();
//		beanHandler();
//		beanListHander();
//		columnListHandler();
//		scalarHandler();
//		mapHandler();
//		mapListHandler();
	}
	/*
	 *  結果集第八種處理方法,MapListHandler
	 *  將結果集每一行儲存到Map集合,鍵:列名,值:資料
	 *  Map集合過多,儲存到List集合
	 */
	public static void mapListHandler()throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT  * FROM sort";
		//呼叫方法query,傳遞結果集實現類MapListHandler
		//返回值List集合, 儲存的是Map集合
		List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler());
		//遍歷集合list
		for( Map<String,Object> map : list ){
			for(String key : map.keySet()){
				System.out.print(key+"..."+map.get(key));
			}
			System.out.println();
		}
		
	}
	
	/*
	 *  結果集第七種處理方法,MapHandler
	 *  將結果集第一行資料,封裝到Map集合中
	 *  Map<鍵,值> 鍵:列名  值:這列的資料
	 */
	public static void mapHandler()throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT  * FROM sort";
		//呼叫方法query,傳遞結果集實現類MapHandler
		//返回值: Map集合,Map介面實現類, 泛型
		Map<String,Object> map = qr.query(con, sql, new MapHandler());
		//遍歷Map集合
		for(String key : map.keySet()){
			System.out.println(key+".."+map.get(key));
		}
	}
	
	
	/*
	 *  結果集第六種處理方法,ScalarHandler
	 *  對於查詢後,只有1個結果
	 */
	public static void scalarHandler()throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT COUNT(*) FROM sort";
		//呼叫方法query,傳遞結果集處理實現類ScalarHandler
		long count = qr.query(con, sql, new ScalarHandler<Long>());
		System.out.println(count);
	}
	
	/*
	 *  結果集第五種處理方法,ColumnListHandler
	 *  結果集,指定列的資料,儲存到List集合
	 *  List<Object> 每個列資料型別不同
	 */
	public static void columnListHandler()throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT * FROM sort ";		
		//呼叫方法 query,傳遞結果集實現類ColumnListHandler
		//實現類構造方法中,使用字串的列名
		List<Object> list = qr.query(con, sql, new ColumnListHandler<Object>("sname"));
		for(Object obj : list){
			System.out.println(obj);
		}
	}
	
	/*
	 *  結果集第四種處理方法, BeanListHandler
	 *  結果集每一行資料,封裝JavaBean物件
	 *  多個JavaBean物件,儲存到List集合
	 */
	public static void beanListHander()throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT * FROM sort ";
		//呼叫方法query,傳遞結果集處理實現類BeanListHandler
		List<Sort> list = qr.query(con, sql, new BeanListHandler<Sort>(Sort.class));
		for(Sort s : list){
			System.out.println(s);
		}
	}
	
	/*
	 *  結果集第三種處理方法,BeanHandler
	 *  將結果集的第一行資料,封裝成JavaBean物件
	 *  注意: 被封裝成資料到JavaBean物件, Sort類必須有空引數構造
	 */
	public static void beanHandler()throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT * FROM sort ";
		//呼叫方法,傳遞結果集實現類BeanHandler
		//BeanHandler(Class<T> type) 
		Sort s = qr.query(con, sql, new BeanHandler<Sort>(Sort.class));
		System.out.println(s);
	}
	
	/*
	 *  結果集第二種處理方法,ArrayListHandler
	 *  將結果集的每一行,封裝到物件陣列中, 出現很多物件陣列
	 *  物件陣列儲存到List集合
	 */
	public static void arrayListHandler()throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT * FROM sort";		
		//呼叫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();
		}
	}
	
	/*
	 *  結果集第一種處理方法, ArrayHandler
	 *  將結果集的第一行儲存到物件陣列中  Object[]
	 */
	public static void arrayHandler()throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT * FROM sort";
		//呼叫方法query執行查詢,傳遞連線物件,SQL語句,結果集處理方式的實現類
		//返回物件陣列
		Object[] result = qr.query(con, sql, new ArrayHandler());
		for(Object obj : result){
			System.out.print(obj);
		}
	}
		
}

相關推薦

java基礎JDBC基於DBUtils工具查詢資料庫8方式非常重要

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

java多線程多線程的創建三方式--筆記

admin auth nbsp 主線程 實現類 如果 nts 名稱 就是 申明:線程的概念以及進程的相關概念,可以參考網絡上其他資料,這裏只討論多線程是怎麽實現。 一、多線程的簡單理解 明白什麽是多線程,小生通俗一點的理解為:在一個程序裏,我想同時讓這個程序完成多個任務

Java TCP/IP Socket基於線程池的TCP服務器(含代碼)

init 成對 之前 .get font ack 字符串 fonts exceptio 了解線程池 在http://blog.csdn.net/ns_code/article/details/14105457(讀書筆記一:TCP Socket)這篇博文中,服務器

Java基礎-堆棧

int throw boolean sdn blog ava string max print 1.如何用java代碼寫一個堆棧 public class Stack {   int[] data;   int maxSize;   int top;   pu

Java基礎-實驗7Banking_7 -添加銀行透支扣款系統的 thorw異常機制

private double without ane 信息 exceptio 構造器 分享 extends 實驗基本要求: 實驗題目 7:(在6基礎上修改) 將建立一個 OverdraftException 異常,它由 Account 類的withdraw(

JAVA基礎知識學習Java中的String,StringBuilder,StringBuffer三者的區別

  最近在學習Java的時候,遇到了這樣一個問題,就是String,StringBuilder以及StringBuffer這三個類之間有什麼區別呢,自己從網上搜索了一些資料,有所瞭解了之後在這裡整理一下,便於大家觀看,也便於加深自己學習過程中對這些知識點的記憶,如果哪

java基礎資料整理

醞釀了幾個月,終於是想寫自己的部落格了。之前聽說寫部落格能更好的學習,所以我就滾進來了! 在漸漸認識到自己的缺陷和不足之後,開始加深自己對java基礎的學習,通過視訊、部落格收集了一些資料。下面分享給大家! 整理之中的意外收穫: 1、java虛擬機器監控命令:開啟cmd視窗

JAVA基礎小問題Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?

Overload是過載的意思,Override是覆蓋的意思,也就是重寫。 過載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的引數列表各不相同(即引數個數或型別不同)。 重寫Override表示子類中的方法可以與父類中的某個方法的名稱和引

JAVA基礎小問題short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

對於short s1 = 1; s1 = s1 + 1;由於s1+1運算時會自動提升表示式的型別,所以結果是int型,再賦值給short型別s1時,編譯器將報告需要強制轉換型別的錯誤。 對於short s1 = 1; s1 += 1;由於 +=是java語言規

Java TCP/IP Socket基於NIO的TCP通訊(含程式碼)

   NIO主要原理及使用 NIO採取通道(Channel)和緩衝區(Buffer)來傳輸和儲存資料,它是非阻塞式的I/O,即在等待連線、讀寫資料(這些都是在一執行緒以客戶端的程式中會阻塞執行緒的操作)的時候,程式也可以做其他事情,以實現執行緒的非同步操作。    考

JAVA基礎小問題java中實現多型的機制是什麼?

靠的是父類或介面定義的引用變數可以指向子類或具體實現類的例項物件,而程式呼叫的方法在執行期才動態繫結,就是引用變數所指向的具體例項物件的方法,也就是記憶體里正在執行的那個物件的方法,而不是引用變數的型別中定義的方法。

Java基礎之五Java中IO詳解

1.Java IO簡介 可能學過計算機組裝與維修的同學都知道I/O裝置,翻譯過來也就是Input/Output(輸入輸出裝置),在硬體中鍵盤、滑鼠 屬於 輸入裝置,顯示器、印表機等屬於輸出裝置,這裡輸入輸出參考物是計算機本身。 java.io包從巨集觀上來

koa2基礎框架封裝基於Proxy路由按需載入器和初始載入器

我們在使用koa2做路由攔截後一般都習慣於直接將查詢對應處理函式的過程對映到專案的資料夾目錄,如: router.get('/test', app.controller.index.test); app.controller.index.test 其實就是對應的處理函式,也就是 (ctx, n

java基礎之異常死了都要try,不淋漓盡致地catch我不痛快

@[toc] # 1、異常 ## 1.1 異常概念 **異常** :簡單說就是不正常執行,最終導致JVM的非正常停止。 在Java等面向物件的程式語言中,異常本身是一個類,產生異常就是建立異常物件並丟擲了一個異常物件。Java處理異常的方式是中斷處理。 > 異常指的並不是語法錯誤,語法錯了,編譯

Java知識點專項練習之 數據型兩大

char ger ava 練習 類型 包裝類 java 進行 cte Java的數據類型分為兩大類:基本類型和引用類型; 基本類型只能保存一些常量數據,引用類型除了可以保存數據,還能提供操作這些數據的功能; 為了操作基本類型的數據,java也對它們進行了封裝, 得到八個類,

Java編程思想7.復用

類繼承 對象內存 rbo 是不是 結合 cte 表示 可能 默認 Java 中復用代碼的方法: 組合:只需在新的類中產生現有類的對象。 繼承:按照現有類的類型來創建新的類,無需改變現有類的形式。 代理:繼承和組合之間的方式 7.1 組合語法 其實就是在一個類中引入其他

java核心36講介面和抽象的區別

回答 介面和抽象類是java面向物件設計的兩個基礎機制。 介面是對行為的抽象,他是抽象方法的集合,利用介面可以達到API定義和實現的分離。介面不能例項化/不能包含非常量成員,任何的feild都是預設public static final的意義;沒有非靜態方法的實現。 抽象

由淺至深redis 現實發布訂閱的幾方式

前言 提到訊息佇列,最熟悉無疑是 rabbitmq,它基本是業界標準的解決方案。本文詳細介紹 redis 多種現實輕訂閱方法,作者認為非常有趣並加以總結,希望對有需要的朋友學習 redis 功能有一定的帶入作用。 方法一:SUBSCRIBE + PUBLISH //程式1:使用程式碼現實訂閱端 var s

Java資料庫的操作——DBUtils工具結果集處理的方式有幾

public class QueryRunnerDemo{ private static Connection con=JDBCUtils.getConnection(); public static void main(String[] args) throws SQLException{ QueryRun

C獲取系統時間C語言獲取系統時間的幾方式

C 語言中如何獲取時間?精度如何? 1 使用 time_t time( time_t * timer ) 精確到秒 2 使用 clock_t clock() 得到的是 CPU 時間 精確到 1/CLOCKS_PER_SEC 秒 3 計算時間差使用 double difftime( time_t tim