?? resultsettobean.java
字號:
package com.tsinghuait.st0717.hospitalsystem.common;
import java.lang.reflect.Method;
import java.sql.Date;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ResultSetToBean {
/**
* 將結果集中的數據拷貝到DTO對象中去
*
* @param rs
* 數據庫結果集對象
* @param dto
* dto對象
*/
public static Collection convertResultSet2DTOCollection(ResultSet rs,
Class cls,int rsBeginIndex,int size) {
Logger log = Logger.getLogger(ResultSetToBean.class.getName());
Collection col = null; // 存放DTO對象的集合
Method[] methods = cls.getMethods(); // DTO對象中所有的方法
String currentMethodName = null;
Method currentMethod = null;
String currentColumnName = null;
try {
// 用于從數據庫中取數據的列名對應要調用的set方法
Map<String, Method> dataMap = new HashMap<String, Method>();
// 獲取數據的列名對應要調用的set方法的map對象
for (int i = 0; i < methods.length; i++) {
currentMethodName = methods[i].getName();
if ("set".equals(currentMethodName.subSequence(0, 3))) {
dataMap.put(currentMethodName.substring(3), methods[i]);
}
}
Set<String> columns = dataMap.keySet();
if (rs != null && rs.absolute(rsBeginIndex)) {
col = new ArrayList(); // 實例化集合對象,用于存放DTO
int count = 0;
do {
Object obj = cls.newInstance(); // 實例化dto對象
Iterator<String> colIterator = columns.iterator();
while (colIterator.hasNext()) {
currentColumnName = colIterator.next();
currentMethod = dataMap.get(currentColumnName);
if (currentMethod.getParameterTypes()[0] == String.class) {
currentMethod.invoke(obj, rs
.getString(currentColumnName));
} else if (currentMethod.getParameterTypes()[0] == Integer.class) {
currentMethod.invoke(obj, rs
.getInt(currentColumnName));
} else if (currentMethod.getParameterTypes()[0] == Date.class) {
currentMethod.invoke(obj, rs
.getDate(currentColumnName));
} else {
log.log(Level.WARNING, "有部分數據轉換失敗");
//throw new Exception("數據轉換失敗!");
}
}
count++;
col.add(obj);
} while (rs.next() && count<size);
}
} catch (Exception e) {
e.printStackTrace();
}
return col;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -