背景:
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>
|
[1] [2] [3] [4] 下一页