通用的增、删、改操作
//通用的增、删、改操作(体现一:增、删、改 ; 体现二:针对于不同的表)
//传可变参数的时候,参数个数要和sql语句中的?一样多
public void update(String sql,Object … args){
Connection conn = null;
PreparedStatement ps = null;
try {
//1.获取数据库的连接
conn = JDBCUtils.getConnection();
//2.获取PreparedStatement的实例 (或:预编译sql语句)
ps = conn.prepareStatement(sql);
//3.填充占位符
for(int i = 0;i < args.length;i++){
ps.setObject(i + 1, args[i]);
}
//4.执行sql语句
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}finally{
//5.关闭资源
JDBCUtils.closeResource(conn, ps);
}
}
查询操作
// 通用的针对于不同表的查询:返回一个对象 (version 1.0)
public
Connection conn = null;<br /> PreparedStatement ps = null;<br /> ResultSet rs = null;<br /> try {<br /> // 1.获取数据库连接<br /> conn = JDBCUtils.getConnection();
// 2.预编译sql语句,得到PreparedStatement对象<br /> ps = conn.prepareStatement(sql);
// 3.填充占位符'?'<br /> for (int i = 0; i < args.length; i++) {<br /> ps.setObject(i + 1, args[i]);<br /> }
// 4.执行executeQuery(),得到结果集:ResultSet<br /> rs = ps.executeQuery();
// 5.得到结果集的元数据:ResultSetMetaData<br /> ResultSetMetaData rsmd = rs.getMetaData();
// 6.1通过ResultSetMetaData得到columnCount,columnLabel;通过ResultSet得到列值<br /> int columnCount = rsmd.getColumnCount();<br /> if (rs.next()) {<br /> T t = clazz.newInstance();<br /> for (int i = 0; i < columnCount; i++) {// 遍历每一个列
// 获取列值<br /> Object columnVal = rs.getObject(i + 1);<br /> // 获取列的别名:列的别名,使用类的属性名充当<br /> String columnLabel = rsmd.getColumnLabel(i + 1);<br /> // 6.2使用反射,给对象的相应属性赋值<br /> Field field = clazz.getDeclaredField(columnLabel);<br /> field.setAccessible(true);<br /> field.set(t, columnVal);
}
return t;
}<br /> } catch (Exception e) {
e.printStackTrace();<br /> } finally {<br /> // 7.关闭资源<br /> JDBCUtils.closeResource(conn, ps, rs);<br /> }
return null;
}