⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resultsettobean.java

📁 简单的医院系统
💻 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 + -