本文实例讲述了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程序设计有所帮助。
【说明】:
本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!