说明:使用PreparedStatement实现的查询操作可以替换Statement实现的查询操作,解决Statement拼串和SQL注入问题。
// 通用的针对于不同表的查询:返回一个对象 (version 1.0)
public
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try{
// 1.获取数据库连接
conn=JDBCUtils.getConnection();
// 2.预编译sql语句,得到PreparedStatement对象
ps=conn.prepareStatement(sql);
// 3.填充占位符
for(inti=0;i
}
// 4.执行executeQuery(),得到结果集:ResultSet
rs=ps.executeQuery();
// 5.得到结果集的元数据:ResultSetMetaData
ResultSetMetaData rsmd=rs.getMetaData();
// 6.1通过ResultSetMetaData得到columnCount,columnLabel;通过ResultSet得到列值
intcolumnCount=rsmd.getColumnCount();
if(rs.next()){
T t=clazz.newInstance();
for(inti=0;i
Object columnVal=rs.getObject(i+1);
// 获取列的别名:列的别名,使用类的属性名充当
String columnLabel=rsmd.getColumnLabel(i+1);
// 6.2使用反射,给对象的相应属性赋值
Field field=clazz.getDeclaredField(columnLabel);
field.setAccessible(true);
field.set(t,columnVal);
}
returnt;
}
}catch(Exceptione){
e.printStackTrace();
}finally{
// 7.关闭资源
JDBCUtils.closeResource(conn,ps,rs);
}
returnnull;
}