mysql读取数据库的结果ResultSet反射生成对象的方法

1.读取数据库,T_Einteractive是我创建的实例类,如果有id字段,数据库的类型可以设置成int或者bigint,但是实例类中应该写成String类型,以免在下面利用反射时报数据类型不匹配的错,数据库表名也是T_Einteractive

	public List  getEinteractiveQuestions(Connection conn){
		ResultSet rs = null;
		List result = new ArrayList();
		try {
			String sql = "select * from T_Einteractive";
			rs = conn.createStatement().executeQuery(sql);
			while (rs.next()) {
				T_Einteractive first = (T_Einteractive) toObject(T_Einteractive.class, rs);
				if (first != null) {
					result.add(first);
				}
			}
		}catch (Exception ex){
			logger.error(ex.getMessage(), ex);
			return null;
		}finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
				}
			}
			return result;
		}
	}

 2.上面的方法中用的toObject的反射方法

	private Object toObject(Class clazz, ResultSet rs) throws Exception {
		Method[] methods = clazz.getMethods();
		Object obj = clazz.newInstance();
		for (Method method : methods) {
			String methodName = method.getName();
			if (methodName.indexOf("set") == 0) {
				String param = methodName.substring(3).toUpperCase();
				String value = null;
				if ((value = rs.getString(param)) != null) {
					method.invoke(obj, value);
				}
			}
		}
		return obj;
	}

这里需要注意下:我使用了toUpperCase(),因为我数据库中的字段全部用的大写,例如ID,NAME等,我在解析javabean是,获取实例类的set方法时,会把setId,setName等截取然后变成大写的ID和NAME去和数据相对应,如果你的数据库字段是小写就不需要使用toUpperCase()

String param = methodName.substring(3).toUpperCase()

 

你可能感兴趣的:(Java,mysql,反射,sql,ResultSet)