您的位置:首页 > 编程语言 > Java开发

Java_jdbc 基础笔记之十一数据库连接 (通用的查询方法)

2015-09-09 10:56 561 查看
鉴于之前的查询方法,在这里我们可以写一个通用的方法

/**
* 鉴于 student、和customer查询的方法有好多相同之处,在此可以写一个通用的方法
*/

public <T> T get(Class<T> clazz, String sql, Object... args) {
// 不知道具体类型可以使用泛型!!!
T entity = null;
// 1.获取连接
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCTools.getConnection();
ps = conn.prepareStatement(sql);
// 填充占位符
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
rs = ps.executeQuery();
// 2、得到ResultSetMatedata类的对象
ResultSetMetaData rsmd = rs.getMetaData();

// 3、创建一个Map<Sring,Object>,键:SQL查询的列的别名 值:列的值
Map<String, Object> values = new HashMap<String, Object>();

// 4、 处理结果集利用 ResultSetMetaData 填充3 对应的Map对象
if (rs.next()) {
for (int i = 0; i < rsmd.getColumnCount(); i++) {
String columnLabel = rsmd.getColumnLabel(i + 1);// 别名
Object columnValue = rs.getObject(i + 1);
values.put(columnLabel, columnValue);// 填充

}

}
// 5、 若Map不为空,利用反射创建clazz对应的对象!!!利用反射赋值
if (values.size() > 0) {
entity = clazz.newInstance();// 反射
for (Map.Entry<String, Object> entry : values.entrySet()) {
String fieldName = entry.getKey();
Object fieldValue = entry.getValue();
ReflectionUtils
.setFieldValue(entity, fieldName, fieldValue);
}
}

} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.close(rs, ps, conn);
}

return entity;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 java jdbc