通过反射解析 jdbc中 的 ResultSet

	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();

			Field[] fields = className.getFields();
			while (result.next()) {
				Object object = className.newInstance();
				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 (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;
	}

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

你可能感兴趣的:(java,sql,jdbc)