2012-04-21 92 views
0

使用會話時得到sql.exception的錯誤,我有使用會話的一些問題。在view.jsp中,我獲取用戶名和密碼並將它們傳遞給portlet類。然後,我從獲取數據庫用戶的信息,並保存在會話,並使用「actionResponse.setRenderParameter(」 jspPage「‘/ patientInfo.jsp’)」命令去patientInfo.jsp。我得到的用戶信息,並用下面的代碼打印出來:在Liferay的門戶

<% 
ResultSet comments = (ResultSet)portletSession.getAttribute("comments"); 
ResultSet patientInfo = (ResultSet)portletSession.getAttribute("patientInfo"); 
patientInfo.next();   
%> 
<table> 
<tr> 
    <th><strong>Patient Name</strong></th> 
    <th><strong>Insuline dose</strong></th> 
</tr> 
<tr> 
    <td class="info"><%=patientInfo.getString("FirstName") + patientInfo.getString("LastName")%></td> 
    <td class="info"><%=Integer.toString(patientInfo.getInt("InsulinDose"))%></td> 
</tr> 

在這個頁面中有是去patientProfile.jsp鏈接:

<portlet:renderURL var="patientProfileURL"> 
    <portlet:param name="jspPage" value="/patientProfile.jsp" /> 
</portlet:renderURL> 

<a href="<%= patientProfileURL%>">Edit Profile</a></p> 

一切正常至今。但是,當我打patientProfile.jsp的後退鏈接使用下面的代碼要回去patientInfo.jsp我得到「java.SQL.Excqption:結果集結束之後」錯誤的堆棧跟蹤和「門戶是teprorily不可用」瀏覽器錯誤:

<portlet:renderURL var="patientInfoURL"> 

    <portlet:param name="jspPage" value="/patientInfo.jsp" /> 

</portlet:renderURL> 

<p><a href="<%= patientInfoURL %>">Back</a></p> 

回答

0

ResultSets和一些JDBC驅動程序支持的一切都是保存在會話中的壞事。通常,他們需要在後端數據庫連接 - ,連接將被重用的第一筆交易(和頁面渲染)後的下一交易完成,所以你看到的例外。

你應該拷貝你有的對象(你怎麼從數據庫中檢索它們呢?plain/pure jdbc access?)到一些沒有任何數據庫連接的業務/數據傳輸對象。

+0

這是我如何連接到數據庫並從數據庫檢索數據: java.lang.Class.forName(_jdbcDriver); 連接= java.sql.DriverManager.getConnection(dbURL,數據庫用戶名,DBPASSWORD); Statement statement = connection.createStatement(); resultSet = statement.executeQuery(sql); – Karadous 2012-04-21 16:58:12

+0

不要這樣做。不要長時間保留從JDBC API返回的結果 - 它會限制應用程序的可伸縮性,並且保留可能被釋放的資源鎖定。可能還會冒着超時或 - 如你所見 - 其他問題。 – 2012-04-22 09:48:17