操作数据库的模板方法(三)
所有的记录,封装到bean,存入list返回
List list = new ArrayList();
while (rs.next()) {
Object bean = clazz.newInstance();
// 获得元数据
ResultSetMetaData metaData = rs.getMetaData();
// 获得列的数量
int count = metaData.getColumnCount();
// 遍历列
for (int i = 1; i <= count; i++) {
// 取列名
String columnName = metaData.getColumnName(i);
// 取这列的值
Object value = rs.getObject(columnName);
// 反射出属性
Field field = clazz.getDeclaredField(columnName);
// 设置属性
field.setAccessible(true);
field.set(bean, value);
}
// 加入list
list.add(bean);
}
return list;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
package cn.edu.hactcm.base.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import cn.edu.hactcm.base.dao.ResultSetHandler;
import cn.edu.hactcm.base.utils.JdbcUtils;
public class GenericDaoImpl {
/**
* 用于处理公共的insert,update,delete操纵
* @param sql :这里是传入的sql语句
* @param params :这里是参数数组
* @return
* @throws SQLException
*/
public static int update(String sql, Object[] params) throws SQLException {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
//预编译sql
pstmt = conn.prepareStatement(sql);
//将参数设置进去
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i+1, params[i]);
}
//发送sql
int num = pstmt.executeUpdate();
return num;
} finally {
JdbcUtils.release(rs, pstmt, conn);
}
}
/**
* 用于处理公共"查询所有"的操作
* @param sql :查询参数
* @param params :出入的id值
* @param rsh :表示要实现那个结果封装类
* @return
* @throws SQLException
*/
public static Object query(String sql,Object[] params,ResultSetHandler rsh) throws SQLException{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//获得连接
conn = JdbcUtils.getConnection();
//预编译sql
pstmt = conn.prepareStatement(sql);
//将参数设置进去
for (int i = 0; params != null && i < params.length; i++) {
pstmt.setObject(i+1, params[i]);
}
//发送sql
rs = pstmt.executeQuery();
//不知道别人想如何处理结果集
//干脆想别人所要一个结果集的处理器
//为了让当前代码继续,定义一个结果集处理器接口
//策略模式,规定算法,具体的算法留给将来的调用者实现
Object obj = rsh.handle(rs);
return obj;
} finally {
//释放资源
JdbcUtils.release(rs, pstmt, conn);
}
}
}