欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

jsp页面常用的查询及显示方法分析

程序员文章站 2022-06-20 08:02:42
本文实例讲述了jsp页面常用的查询及显示方法。分享给大家供大家参考,具体如下: 背景: 1. 需要将数据库查询结果在jsp中以列表方式显示 2. 在一个良好的j2ee...

本文实例讲述了jsp页面常用的查询及显示方法。分享给大家供大家参考,具体如下:

背景:

1. 需要将数据库查询结果在jsp中以列表方式显示
2. 在一个良好的j2ee模式中数据库查询一般用dao实现(data access object), jsp仅用于显示数据

方法一:

建一个类,将查询出的结果封装到该类中,然后将该类对象添加到list中。(这个也是我最开始时用的方法,不通用且太麻烦了)。

方法二:

在介绍方法二的时候,我们先来看看如何把resultset转化为list吧,代码如下:

private static list resultsettolist(resultset rs) throws sqlexception {
 list list = new arraylist();
 resultsetmetadata md = rs.getmetadata();
 int columncount = md.getcolumncount();
 while (rs.next()) {
  map rowdata = new hashmap();
  for (int i = 1; i <= columncount; i++) {
  rowdata.put(md.getcolumnname(i), rs.getobject(i));
  }
  list.add(rowdata);
 }
 return list;
}

遍历resultset取出所有数据封装进collection。

具体做法:

1. 生成一个list对象(list list = new arraylist() )。
2. 生成一个map对象(map map = new hashmap() )。使用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(resultset rs)方法中实现了上述过程(所有列名均使用大写),可参考使用。

示例代码:

//查询数据部分代码:
…
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");
rs = pst.executequery();
list list = dbutil. resultsettolist(resultset rs);
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>
<%
map colmap;
for (int i=0; i< emplist.size(); i++){
colmap = (map) emplist.get(i);
%>
<tr>
<td><%=colmap.get("emp_code")%></td>
<td><%=colmap.get("real_name")%></td>
</tr>
<%
}// end for
%>
</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

示例代码:

//查询数据部分代码:
import javax.sql.rowset;
import oracle.jdbc.rowset.oraclecachedrowset;
…
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");
rs = pst.executequery();
oraclecachedrowset ors = neworaclecachedrowset();

希望本文所述对大家jsp程序设计有所帮助。