2013-12-19 140 views
1

我有一個大學任務,並且我被要求顯示來自訪問數據庫的植物列表,然後還包括一個搜索功能來過濾掉這些結果。多個結果集

我有植物列表顯示足夠簡單。但是,我無法使搜索工作,所以我嘗試了另一個SQL查詢,然後我想出了這個錯誤。我已經做了一些閱讀和搜索,我似乎無法找到我的問題的答案。

javax.servlet.ServletException:值java.sql.SQLException:ResultSet的關閉

這裏是我的代碼:

<%@page import="java.sql.*"%> 
<%@page contentType="text/html"%> 
<% 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
Connection cn = DriverManager.getConnection("jdbc:odbc:PlantsDB", "", ""); 
Statement st = cn.createStatement(); 
ResultSet r = st.executeQuery("SELECT * FROM Plant;"); 
String html = ""; 
String id; 
while (r.next()) { 
    id = Integer.toString(r.getInt("PlantID")); 
    html += "<a href='Plant" + id + ".jsp" + "'>"; 
    html += r.getString("EnglishName") + "-" + r.getString("ScientificName") 
    + "<a><br>"; 
} 
r.close(); 
cn.close(); 

if (request.getParameter("sBtn") != null) { 
Connection sn = DriverManager.getConnection("jdbc:odbc:PlantsDB", "", ""); 
//String search = request.getParameter(sQuery); 
//request.getSession().setAttribute("search",search); 
Statement sq = sn.createStatement(); 
ResultSet sqr = sq.executeQuery("SELECT * FROM Plant WHERE EnglishName LIKE 
'%" + "Co" + "%'"); 
while (sqr.next()) { 
id = Integer.toString(r.getInt("PlantID")); 
html += "<a href='Plant" + id + ".jsp" + "'>"; 
html += r.getString("EnglishName") + "-" + r.getString("ScientificName") 
+ "<a><br>"; 
} 
sn.close(); 
} 

%> 
<!DOCTYPE html> 
<html> 
<head><title></title></head> 
<body bgcolor="#A8A8A8"> 
<%=html%> 
<form method="POST"> 
<input type="text" id="search" name="sQuery"> 
<input type="submit" id="sBtn" name="sBtn" value="Search" > 
</form> 
</body> 
</html> 

我將不勝感激,如果有人可能可以解釋的錯誤好一點,並可能指向正確的方向。我很困惑,爲什麼當我使用完全不同的結果集時,結果集是關閉的?

回答

1

因爲你不使用完全不同的一個:

id = Integer.toString(r.getInt("PlantID")); 
html += r.getString("EnglishName") + "-" + r.getString("ScientificName") 

r指的是先前關閉的ResultSet,而不是新sqr

請注意,除了可讀性外,給新的結果設置一個新的名字並不是必須的,但是通過給它們一些通用的,無用的名字來消除這個優點。

+0

我完全錯過了,儘管它仍然拋出了同樣的錯誤。我不知道這些關於ResultSet – user3119946

+0

@ user3119946它是一個'ResultSet'不重要;一個參考是一個參考。不過,我不相信你會在未關閉的結果集上得到結果集關閉異常。 –

+0

好的,無論如何,我的解決方案是解決問題的好方法嗎?或者你會以不同的方式去改變它? – user3119946