背景:
1. 需要将数据库查询结果在JSP中以列表方式显示
2. 在一个良好的J2EE模式中数据库查询一般用DAO实现(Data Access Object), JSP仅用于显示数据
问题:通过JDBC ResultSet可获取查询结果(存在于数据库缓冲区内),但在Statement、Connection关闭后ResultSet即不可用。因此需要一种方式取出所有查询结果并传递至JSP页面。
解决方法一:
使用Value Object.将每条记录均封装成JavaBean对象,把这些对象装入Collection传送给JSP显示。这种方法的缺点是每一种查询都需要定义一个java class,并且将记录数据封装成java对象时也需要很多额外的代码。
示例代码:
//查询数据代码
Connection conn = DBUtil.getConnection();
PreparedStatement pst = null;
ResultSet rs = null;
try{
String sql=“select emp_code, real_name from t_employee where organ_id=?”;
pst = conn.preparedStatement(sql);
pst.setString(1, “101”);
ResultSet rs = pst.executeQuery();
List list = new ArrayList();
Employee emp;
while (rs.next()){
emp = new Employee();
emp.setReakName(rs.getString(“real_name”));
emp.setEmpCode(rs.getString(“emp_code”));
…
list.add(emp);
}
return list;
}finally{
DBUtil.close(rs, pst ,conn);
}
//jsp显示部分代码
<%
List empList = (List)request.getAttribute(“empList”);
if (empList == null) empList = Collections.EMPTY_LIST;
%>
…
<table cellspacing="0" width=”90%”>
<tr> <td>代码</td> <td>姓名</td> </tr>
<%
Employee emp;
for (int i=0; i< empList.size(); i++){
emp = (Employee) empList.get(i);
%>
<tr>
<td><%= emp.getEmpCode()%></td>
<td><%= emp.getRealName()%></td>
</tr>
<%
}// end for
%>
</table>