码迷,mamicode.com
首页 > 数据库 > 详细

通过反射解析 jdbc中 的 ResultSet

时间:2015-08-30 06:39:21      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

private <T extends Object> T getResult(Class<?> className, String sql,
			String... params) {
		List<?> list = getResultList(className, sql, params);
		if (list != null && list.size() > 0) {
			return (T) list.get(0);
		}
		return null;
	}

	private <T extends List<?>> T getResultList(Class<?> className, String sql,
			String... params) {
		try {
			PreparedStatement st = conn.prepareStatement(sql);
			for (int i = 1; i <= params.length; i++) {
				st.setString(i, params[i - 1]);
			}
			List<Object> list = new ArrayList<>();
			ResultSet result = st.executeQuery();
			while (result.next()) {
				Object object = Class.forName(className.getName())
						.newInstance();
				Field[] fields = className.getFields();
				for (int i = 0; i < fields.length; i++) {
					Field field = fields[i];
					field.setAccessible(true);
					Class<?> typeClass = field.getType();
					Constructor<?> con = typeClass.getConstructor(typeClass);
					Object value = con.newInstance(result.getString(field
							.getName()));
					field.set(object, value);
				}
				list.add(object);
			}
			return (T) list;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

注意:类的变量名必须与数据表中的字段名相同.

通过反射解析 jdbc中 的 ResultSet

标签:

原文地址:http://my.oschina.net/oldfeel/blog/499137

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!