// 查询
public static <T> ArrayList<T> query(Class<T> clazz, String sql, Object... args) {
PreparedStatement ps = null;
Connection conn = null;
ResultSet resultSet = null;
try {
// 1.获得连接
conn = JDBCUtil.getConnection();
// 2.预编译
ps = conn.prepareStatement(sql);
// 填充占位符
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
// 3.1执行
resultSet = ps.executeQuery();
// 3.2 获得元数据(数据库的字段)
ResultSetMetaData metaData = resultSet.getMetaData();
// 3.2 获得元数据的个数
int columnCount = metaData.getColumnCount();
ArrayList<T> list = new ArrayList<T>();
// 4.返回结果集
while (resultSet.next()) {
// 反射实例化对象
T t = clazz.newInstance();
for (int i = 0; i < columnCount; i++) {
// 获得值
Object columnValue = resultSet.getObject(i + 1);
// 获得列名
String columnLabel = metaData.getColumnLabel(i + 1);
// 通过反射调用属性并赋值
Field field = clazz.getDeclaredField(columnLabel);
field.setAccessible(true);
field.set(t, columnValue);
}
//将t对象加到集合
list.add(t);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.close(conn, ps, null);
}
return null;
}
JDBC——利用反射动态获取结果集
最新推荐文章于 2020-08-24 20:59:10 发布