我有大学任务,我被要求显示一个访问数据库中的植物列表,然后还包括一个搜索功能来过滤掉这些结果。
我显示的植物清单很容易。但是,我无法使搜索工作,所以我尝试了另一个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>
如果有人能够更好地解释错误,并且可能指出我正确的方向,我将不胜感激。我很困惑为什么当我使用另一个时,结果集是关闭的?
答案 0 :(得分:1)
因为你没有完全使用另一个:
id = Integer.toString(r.getInt("PlantID"));
html += r.getString("EnglishName") + "-" + r.getString("ScientificName")
r
指的是之前关闭的ResultSet
,而不是新的sqr
。
请注意,除了可读性之外,为新结果集提供新名称并不是必需的,但是无论如何都要通过赋予它们通用的,无用的名称来消除这种优势。