2013-12-19 4 views
1

대학 과제가 있으며 액세스 데이터베이스에서 식물 목록을 표시하도록 요청한 다음 이러한 결과를 필터링하는 검색 기능을 포함하도록 요청 받았습니다.Multiple ResultSets

식물 목록이 쉽게 표시됩니다. 그러나 검색 기능을 사용할 수 없으므로 다른 SQL 쿼리로 시도했지만이 오류가 발생했습니다. 나는 독서와 검색을 해왔고 내 질문에 대한 답을 찾지 못하는 것 같습니다.

이 javax.servlet.ServletException : java.sql.SQLException의 : 결과 집합 여기

을 폐쇄하는 것은 내 코드입니다 : 누군가가 가능성이 오류를 설명 할 수있는 경우

<%@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

당신이 완전히 다른 것을 사용하지 않을 이유는 r는 새로운 sqr, ResultSet하지 이전에 폐쇄를 의미

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

것을.

가독성을 제외하고 새 결과 집합에 새 이름을 지정하는 것은 실제로 필요하지 않지만 어쨌든 일반적이지 않은 이름을 사용하여 이점을 제거한다는 점에 유의하십시오.

+0

아직 완전히 동일한 오류가 발생하지만 완전히 놓쳤습니다. 그리고 나는 ResultSet에 대해 모른다. – user3119946

+0

@ user3119946 그것은 'ResultSet'이 중요하지 않다. 참조는 참조입니다. 당신이 결과 집합을 닫지 않은 결과 집합에 대한 예외 집합을 얻을 것이라고 나는 믿지 않는다. –

+0

어쨌든 내 솔루션은 문제를 해결할 수있는 좋은 방법입니까? 또는 당신은 그것에 대해 다르게 갈 것입니까? – user3119946