<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    江蘇520

    江蘇520

    常用鏈接

    統計

    最新評論

    JSP頁面查詢顯示常用模式

    背景
    1.    需要將數據庫查詢結果在JSP中以列表方式顯示
    2.    在一個良好的J2EE模式中數據庫查詢一般用DAO實現(Data Access Object), JSP僅用于顯示數據

    問題
        通過JDBC ResultSet可獲取查詢結果(存在于數據庫緩沖區內),但在Statement、Connection關閉后ResultSet即不可用。因此需要一種方式取出所有查詢結果并傳遞至JSP頁面。

    解決方法一
        使用Value Object。將每條記錄均封裝成JavaBean對象,如:http://www.bt285.cn 把這些對象裝入Collection傳送給JSP顯示。這種方法的缺點是每一種查詢都需要定義一個java class,并且將記錄數據封裝成java對象時也需要很多額外的代碼。
    示例代碼:

    1. //查詢數據代碼
    2.   Connection conn = DBUtil.getConnection();
    3.   PreparedStatement pst = null;
    4.   ResultSet rs = null;
    5.   try{
    6.     String sql=“select emp_code, real_name from t_employee where organ_id=?”;
    7.     pst = conn.preparedStatement(sql);
    8.     pst.setString(1, “101”);
    9.     ResultSet rs = pst.executeQuery();
    10.     List list = new ArrayList();
    11.     Employee emp;
    12.     while (rs.next()){
    13.       emp = new Employee();
    14.       emp.setReakName(rs.getString(“real_name”));
    15.       emp.setEmpCode(rs.getString(“emp_code”));
    16.       …
    17.       list.add(emp);
    18.     }
    19.     return list;
    20.   }finally{
    21.     DBUtil.close(rs, pst ,conn);
    22.   }
    23. //jsp顯示部分代碼
    24. <%
    25.   List empList = (List)request.getAttribute(“empList”);
    26.   if (empList == null) empList = Collections.EMPTY_LIST;
    27. %>
    28. <table  cellspacing="0" width=”90%”>
    29.     <tr>  <td> http://www.5a520.cn   小說520網 代碼</td> <td>姓名</td>  </tr>
    30. <%
    31.   Employee emp;
    32.   for (int i=0; i< empList.size(); i++){
    33.     emp = (Employee) empList.get(i);
    34. %>
    35.     <tr>  
    36.       <td><%= emp.getEmpCode()%></td> 
    37.       <td><%= emp.getRealName()%></td>  
    38.     </tr>
    39. <%
    40.   }// end for
    41. %>
    42. </table>


    解決方法二
        遍歷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)方法中實現了上述過程(所有列名均使用大寫),可參考使用。

    示例代碼

    1. //查詢數據部分代碼:
    2.   …
    3.   Connection conn = DBUtil.getConnection();
    4.   PreparedStatement pst = null;
    5.   ResultSet rs = null;
    6.   try{
    7.     String sql=“select emp_code, real_name from t_employee where organ_id=?”;
    8.     pst = conn.preparedStatement(sql);
    9.     pst.setString(1, “101”);
    10.     rs = pst.executeQuery();
    11.     List list = DBUtil. resultSetToList(ResultSet rs);
    12.     return list;
    13.   }finally{
    14.     DBUtil.close(rs, pst ,conn);
    15.   }
    16. //JSP顯示部分代碼
    17. <%
    18.   List empList = (List)request.getAttribute(“empList”);
    19.   if (empList == null) empList = Collections.EMPTY_LIST;
    20. %>
    21. <table  cellspacing="0" width=”90%”>
    22.     <tr>  <td> http://www.feng123.com 蜂蜜 代碼</td> <td>姓名</td>  </tr>
    23. <%
    24.   Map colMap;
    25.   for (int i=0; i< empList.size(); i++){
    26.     colMap = (Map) empList.get(i);
    27. %>
    28.   <tr>  
    29.     <td><%=colMap.get(“EMP_CODE”)%></td> 
    30.     <td><%=colMap.get(“REAL_NAME”)%></td>  
    31.   </tr>
    32. <%
    33.   }// end for
    34. %>
    35. </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

    示例代碼

    1. //查詢數據部分代碼:
    2.   import javax.sql.RowSet;
    3.   import oracle.jdbc.rowset.OracleCachedRowSet;
    4.   …
    5.   Connection conn = DBUtil.getConnection();
    6.   PreparedStatement pst = null;
    7.   ResultSet rs = null;
    8.   try{……
    9.     String sql=“select emp_code, real_name from t_employee where organ_id=?”;
    10.     pst = conn.preparedStatement(sql);
    11.     pst.setString(1, “101”);
    12.     rs = pst.executeQuery();
    13.     OracleCachedRowSet ors = newOracleCachedRowSet();
    14.     //將ResultSet中的數據封裝到RowSet中
    15.     ors.populate(rs);
    16.     return ors;
    17.   }finally{
    18.     DBUtil.close(rs, pst, conn);
    19.   }
    20. //JSP顯示部分代碼
    21. <%
    22.   javax.sql.RowSet empRS = (javax.sql.RowSet) request.getAttribute(“empRS”);
    23. %>
    24. <table  cellspacing="0" width=”90%”>
    25.     <tr>  <td>代碼</td> <td>姓名</td>  </tr>
    26. <%
    27.   if (empRS != nullwhile (empRS.next() ) {
    28. %>
    29.   <tr>  
    30.     <td><%= empRS.get(“EMP_CODE”)%></td> 
    31.     <td><%= empRS.get(“REAL_NAME”)%></td>  
    32.   </tr>
    33. <%
    34.   }// end while
    35. %>
    36. </table>


    適用場合
      方法一使用于定制的查詢操作
      方法二適用于多條查詢語句或需要對查詢結果進行處理的情況。
      方法三適合于單條查詢語句,適用于快速開發。

    posted on 2009-05-27 21:36 江蘇520 閱讀(1620) 評論(0)  編輯  收藏

    主站蜘蛛池模板: 久久精品免费视频观看| 亚洲av无码一区二区三区在线播放| 一级看片免费视频| 又色又污又黄无遮挡的免费视| 亚洲AV香蕉一区区二区三区| 全免费a级毛片免费看不卡| 亚洲中文字幕无码av| 成年人免费网站在线观看| 亚洲国产精品免费在线观看| 国产曰批免费视频播放免费s| 亚洲国产aⅴ综合网| 亚洲AV无码专区国产乱码不卡| 国产精品久久香蕉免费播放| 亚洲美女中文字幕| 亚洲黄色免费网站| 亚洲日韩乱码中文字幕| 免费v片在线观看无遮挡| 国产精品永久免费| 亚洲综合国产精品| 无码日韩精品一区二区免费| 亚洲爆乳大丰满无码专区| 国产成人免费片在线观看| 久久WWW免费人成—看片| 国产91久久久久久久免费| 亚洲五月丁香综合视频| 精品视频在线免费观看| 亚洲情侣偷拍精品| 免费无码又爽又刺激网站 | 亚洲一区二区免费视频| 久久夜色精品国产噜噜亚洲a| 免费v片视频在线观看视频| 久久免费视频观看| 中文字幕亚洲男人的天堂网络| 国产免费观看视频| 日本免费污片中国特一级| 亚洲偷自拍另类图片二区| 亚洲情综合五月天| 四虎成人免费影院网址| 18禁在线无遮挡免费观看网站| 亚洲综合无码一区二区痴汉| 亚洲色大成网站www永久一区|