JSP中早就有了類似.Net DataSet那樣的離線資料訪問

來源:互聯網
上載者:User
js|訪問|資料

  JSP中早就有了類似.Net DataSet那樣的離線資料訪問了,拋棄ResultSet,擁抱Result吧!

微軟的.NET平台上面的資料訪問有一個特點,就是資料查詢的結果,可以放在記憶體中,以XML格式進行描述,不需要一直與資料庫保持線上串連,用DataSet + Data Adapter來實現!

而在JDBC中,我們通常使用javax.sql.ResultSet類來存放放回的資料,它的流程和生命週期如下:

使用ResultSet來返回資料庫查詢結果
Client --> Connection --> Statement --> JDBC Driver --+
  Database
Client <-- Parsing <-- ResultSet <-- JDBC Driver --+
               
  Connection lifecycle
   
   
 
  ResultSet lifecycle  
 

我們可以看到,這樣會長期佔用資料庫連接的資源,是一個有點不爽的問題...

其實,在JSTL中提供了另外一種機制,讓我們在返回查詢結果到展示層的時候,可以做到離線使用!它就是javax.servlet.jsp.jstl.sql.Result類!

1 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
2 <%@page contentType="text/html; charset=UTF-8"%>
3 <%@page import="java.sql.Connection"%>
4 <%@page import="java.sql.DriverManager"%>
5 <%@page import="java.sql.ResultSet"%>
6 <%@page import="java.sql.SQLException"%>
7 <%@page import="java.sql.Statement"%>
8 <%@page import="javax.servlet.jsp.jstl.sql.Result"%>
9 <%@page import="javax.servlet.jsp.jstl.sql.ResultSupport"%>
10 <%
11   // 暫且把這個下面的內容看作多層架構中的DAO好了,我偷懶了!
12   Connection conn = null;
13   Statement stmt = null;
14   ResultSet rs = null;
15   String strDbUrl
16       = "jdbc:mysql://localhost/tutorial?user=tutorial&password=tutpwd";
17   try {
18     //開始與資料庫作查詢19     Class.forName("com.mysql.jdbc.Driver").newInstance();
20     conn = DriverManager.getConnection(strDbUrl);21     stmt = conn.createStatement();
22     String strSql = "SELECT * FROM R_TUT_USERS";23     rs = stmt.executeQuery(strSql);
24     //把ResultSet轉化成Result25     Result userData = ResultSupport.toResult(rs);
26     //當我們把結果放到某個Model bean後,就可以關閉資料庫連接了.
27     //為了簡化,我們暫且把pageContext看作Model Bean好了!
28     pageContext.setAttribute("userData", userData);
29   }
30   catch (Exception ex) {
31     // handle any errors
32     System.out.println("SQLException: " + ex.getMessage());
33   }
34   finally {
35     try {
36       if (rs != null) {
37         rs.close();
38       }
39       if (stmt != null) {
40         stmt.close();
41       }
42       if (conn != null) {
43         conn.close();
44       }
45     }
46     catch (SQLException ex) {
47       System.out.println("SQL Exception: " + ex.getMessage());
48     }
49   }
50   //DAO的邏輯結束
51 %>
52 <html>
53 <head>
54 <title>test</title>
55 </head>
56 <body>
57 <!--// 下面當作是展示層吧 //-->
58 <c:forEach items="${userData.rows}" var="user">
59   <c:out value='${user.name}'/>
60 </c:forEach>
61 </body>
62 </html>



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。