Resultset轉Bean工具類


package org.pandas.webIdp.webOP.help;
 
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
 
public class ResBeanUntil<T> {
	/**
	 * 
	 * @param clazz 所要封裝的javaBean
	 * @param rs 記錄集
	 * @return ArrayList 數組里邊裝有 多個javaBean
	 * @throws Exception
	 * @說明:利用反射機制從ResultSet自動綁定到JavaBean;根據記錄集自動調用javaBean里邊的對應方法。如果javaBean與數據庫字段類型不匹配,按String類型封裝
	 */
	public List<T> getList(Class<T> clazz, ResultSet rs)  {
 
		Field field = null;
		List<T> lists = new ArrayList<T>();
 
		// 取得類里邊的所有方法
		try {
 
			// 取得ResultSet列名
			ResultSetMetaData rsmd = rs.getMetaData();
			// 獲取記錄集中的列數
			int counts = rsmd.getColumnCount();
			// 定義counts個String 變量
			String[] columnNames = new String[counts];
			// 給每個變量賦值
			for (int i = 0; i < counts; i++) {
				columnNames[i] = rsmd.getColumnLabel(i + 1);
			}
 
			// 變量ResultSet
			while (rs.next()) {
				T t = clazz.newInstance();
				// 反射, 從ResultSet綁定到JavaBean
				e:for (int i = 0; i < counts; i++) {
					// 根據 rs 列名 ,組裝javaBean里邊的其中一個set方法,object 就是數據庫第一行第一列的數據了
					Object value =null;	Class<?> dbType =null;
					
					//try的意義是在於 獲取對象為空時
					try {
					value=rs.getObject(columnNames[i]);
					//這里是獲取數據庫字段的類型   判斷 value是否為空 null的話跳過
					 dbType =value.getClass();
					} catch (Exception e) {
						continue e;
						
					}
					//設置參數類型,此類型應該跟javaBean 里邊的類型一樣,而不是取數據庫里邊的類型
					
					field = clazz.getDeclaredField(columnNames[i]);
					Class<?> beanType = field.getType();
					
					
					//如果發生從數據庫獲取到得類型跟javaBean類型不同,按String類型取吧
					
					if(beanType!=dbType){
						value = rs.getString(columnNames[i]);
					}
					String setMethodName = "set" + firstUpperCase(columnNames[i]);
					// 第一個參數是傳進去的方法名稱,第二個參數是 傳進去的類型;
					Method m = t.getClass().getMethod(setMethodName,beanType);
					// 第二個參數是傳給set方法數據;如果是get方法可以不寫
					m.invoke(t, value);
				}
				lists.add(t);
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return lists;
	}
	
	//首寫字母變大寫
	  public static String firstUpperCase(String old){
		  
		  return old.substring(0, 1).toUpperCase()+old.substring(1);
	  } }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM