jsp页面常用的查询及显示方法分析
本文实例讲述了jsp页面常用的查询及显示方法。分享给大家供大家参考,具体如下:
背景:
1.需要将数据库查询结果在JSP中以列表方式显示
2.在一个良好的J2EE模式中数据库查询一般用DAO实现(DataAccessObject),JSP仅用于显示数据
方法一:
建一个类,将查询出的结果封装到该类中,然后将该类对象添加到List中。(这个也是我最开始时用的方法,不通用且太麻烦了)。
方法二:
在介绍方法二的时候,我们先来看看如何把ResultSet转化为List吧,代码如下:
privatestaticListresultSetToList(ResultSetrs)throwsSQLException{
Listlist=newArrayList();
ResultSetMetaDatamd=rs.getMetaData();
intcolumnCount=md.getColumnCount();
while(rs.next()){
MaprowData=newHashMap();
for(inti=1;i<=columnCount;i++){
rowData.put(md.getColumnName(i),rs.getObject(i));
}
list.add(rowData);
}
returnlist;
}
遍历ResultSet取出所有数据封装进Collection。
具体做法:
1.生成一个List对象(Listlist=newArrayList())。
2.生成一个Map对象(Mapmap=newHashMap())。使用Map封装一行数据,key为各字段名,value为对应的值。(map.put("USER_NAME"),rs.getString("USER_NAME"))
3.将第2步生成的Map对象装入第1步的list对象中(list.add(map))。
4.重复2、3步直到ResultSet遍历完毕
在DBUtil.resultSetToList(ResultSetrs)方法中实现了上述过程(所有列名均使用大写),可参考使用。
示例代码:
//查询数据部分代码:
…
Connectionconn=DBUtil.getConnection();
PreparedStatementpst=null;
ResultSetrs=null;
try{
Stringsql="selectemp_code,real_namefromt_employeewhereorgan_id=?";
pst=conn.preparedStatement(sql);
pst.setString(1,"101");
rs=pst.executeQuery();
Listlist=DBUtil.resultSetToList(ResultSetrs);
returnlist;
}finally{
DBUtil.close(rs,pst,conn);
}
//JSP显示部分代码
<%
ListempList=(List)request.getAttribute("empList");
if(empList==null)empList=Collections.EMPTY_LIST;
%>
…
<tablecellspacing="0"width="90%">
<tr><td>代码</td><td>姓名</td></tr>
<%
MapcolMap;
for(inti=0;i<empList.size();i++){
colMap=(Map)empList.get(i);
%>
<tr>
<td><%=colMap.get("EMP_CODE")%></td>
<td><%=colMap.get("REAL_NAME")%></td>
</tr>
<%
}//endfor
%>
</table>
解决方法三:
使用RowSet。
RowSet是JDBC2.0中提供的接口,Oracle对该接口有相应实现,其中很有用的是oracle.jdbc.rowset.OracleCachedRowSet。OracleCachedRowSet实现了ResultSet中的所有方法,但与ResultSet不同的是,OracleCachedRowSet中的数据在Connection关闭后仍然有效。
oracle的rowset实现在http://otn.oracle.com/software/content.html的jdbc下载里有,名称是ocrs12.zip
示例代码:
//查询数据部分代码:
importjavax.sql.RowSet;
importoracle.jdbc.rowset.OracleCachedRowSet;
…
Connectionconn=DBUtil.getConnection();
PreparedStatementpst=null;
ResultSetrs=null;
try{
……
Stringsql="selectemp_code,real_namefromt_employeewhereorgan_id=?";
pst=conn.preparedStatement(sql);
pst.setString(1,"101");
rs=pst.executeQuery();
OracleCachedRowSetors=newOracleCachedRowSet();
希望本文所述对大家jsp程序设计有所帮助。