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

來源:互聯網
上載者:User

微軟的.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轉化成Result
25 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>
相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.