jsp页面常用的查询及显示方法分析
本文实例讲述了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程序设计有所帮助。