连续调用数据库2次,错误信息如下,大家帮帮我(附源码)

jamescheng 2002-05-08 10:00:30
所用系统: win2000,tomcat,MSsql
错误代码如下:
javax.servlet.ServletException: ResultSet is closed
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:461)
at _0002fproductlv_00032_0002ejspproductlv2_jsp_36._jspService(_0002fproductlv_00032_0002ejspproductlv2_jsp_36.java:241)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

源码如下:
<%
java.sql.ResultSet sqlRst; //结果集对象1
java.sql.ResultSet sqlRst1; //结果集对象2
java.lang.String strCon; //数据库连接字符串
java.lang.String strSQL; //SQL语句1
java.lang.String strSQL1; //SQL语句2
java.lang.String tempx;
int i;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
strCon = "jdbc:odbc:guest_db";
sqlCon = java.sql.DriverManager.getConnection(strCon,"XXX","XXX");
sqlStmt = sqlCon.createStatement();
%>
strSQL1 = "select DISTINCT goodtype from good_2_lv where level1='"+lv1+"' and flag='1' ";
sqlRst1= sqlStmt.executeQuery(strSQL1);
while (sqlRst1.next()) {
String goodee = sqlRst1.getString(1);
out.print(goodee);
strSQL = "select * from good_2_lv where goodtype='"+goodee+"'";
sqlRst= sqlStmt.executeQuery(strSQL);
while(sqlRst.next()) { %>
<tr>
<td><font size="2"><a href="product1.jsp?number=<%=sqlRst.getString(1)%>&lv=<%=lv1%>"><%=sqlRst.getString(3)%>
<% String dd=sqlRst.getString(6);
if (dd.equals("none")) {
}
else
{
%>
--<%=dd%>
<% } %>
</a></font></td>
</tr>
<% }
sqlRst.close();
sqlStmt.close();
sqlCon.close(); %>
<% }%>
...全文
8 点赞 收藏 24
写回复
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamescheng 2002-05-08
我该如何申明呢?
回复
sunharck 2002-05-08
你的嵌套循环使用了同一个 sqlStmt,第二次循环时,前一次的sqlStmt已经失效,你嵌套循环要使用需声明两个Stmt。
回复
jamescheng 2002-05-08
如果第一次循环有多条记录,我该如何办呢?
我原来的程序第一次找到8个记录,然后第2次循环的对应第1条找到的记录出现相对应得很多记录,我这样做嵌套数据库循环对不对,如果不对我应该如何做呢?请给我一段相应的代码,让我参照一下,同时在这里谢谢大家给我的帮助,特别是我们亲爱的斑竹。 :)
回复
jamescheng 2002-05-08
如果第一次循环有多条记录,我该如何办呢?
回复
可乐加水 2002-05-08
开始的时候我先关闭记录集,提示函数顺序错误,后来改成先关闭状态集,在关闭记录集,运行正确
回复
可乐加水 2002-05-08
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=GB2312">
<META name="GENERATOR" content="IBM WebSphere Studio">
<TITLE>test.jsp</TITLE>
</HEAD>
<%@ page import="java.sql.*" %>

<BODY>
<%
java.sql.ResultSet sqlRst; //结果集对象1
java.sql.ResultSet sqlRst1; //结果集对象2
java.lang.String strCon; //数据库连接字符串
java.lang.String strSQL; //SQL语句1
java.lang.String strSQL1; //SQL语句2
java.lang.String tempx;
int i;
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
Connection sqlCon = DriverManager.getConnection("jdbc:db2:ebank","ddd","ddd");

//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//strCon = "jdbc:odbc:guest_db";
//sqlCon = java.sql.DriverManager.getConnection(strCon,"XXX","XXX");
Statement sqlStmt = sqlCon.createStatement();
strSQL1 = "select DISTINCT brch_no from brch_table where city_no=1";
sqlRst1= sqlStmt.executeQuery(strSQL1);
while (sqlRst1.next()) {
String goodee = sqlRst1.getString(1);
out.print(goodee);
strSQL = "select * from brch_table where city_no=1";
sqlRst= sqlStmt.executeQuery(strSQL);
while(sqlRst.next()) { %>
<tr>
<td><font size="2"><a href="product1.jsp?number=<%=sqlRst.getString(1)%>"><%=sqlRst.getString(1)%>
<% String dd=sqlRst.getString(1);
if (dd.equals("none")) {
}
else
{
%>
--<%=dd%>
<% } %>
</a></font></td>
</tr>
<% }
//sqlRst.close();
}
//sqlRst1.close();
sqlStmt.close();
sqlRst1.close();
sqlCon.close(); %>
</BODY>
</HTML>
我的数据库里只有一条满足条件的记录
以上程序调是通过,运行结果是:
1 1 --1
回复
jamescheng 2002-05-08
那么如何可以嵌套数据库呢?
请附一段简单的代码,谢谢
回复
可乐加水 2002-05-08
还有
sqlCon = java.sql.DriverManager.getConnection(strCon,"XXX","XXX");
这里面的sqlCon也没声明呀
回复
可乐加水 2002-05-08
sqlCon = java.sql.DriverManager.getConnection(strCon,"XXX","XXX");
sqlStmt = sqlCon.createStatement();
%>
strSQL1 = "select DISTINCT goodtype from good_2_lv where level1='"+lv1+"' and flag='1' ";
上面的%>好像是多余的吧,不知道是你拷贝的时候是不是落了东西!!!嘻嘻
回复
zijianyi 2002-05-08
当你的一个数据查询后没有rst.next()是不能进行下一次数据操作的

也就是说你不能有数据库操作的嵌套
回复
可乐加水 2002-05-08
你在
<% }
sqlRst.close();
}
sqlStmt.close();
sqlCon.close(); %>
里面再加一句,变成这样
<% }
sqlRst.close();
}
sqlRst1.close();
sqlStmt.close();
sqlCon.close(); %>
不会还有错了吧
回复
jamescheng 2002-05-08
我肯定没有关!! 但是有这种错误
回复
wjfxiao 2002-05-08
不是找不到纪录,而是结果集被关掉了!
如果你没关result,statement,connection的话,不应该报这种错的啊!
回复
jamescheng 2002-05-08
还是
javax.servlet.ServletException: ResultSet is closed
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:461)
at _0002fproductlv_00032_0002ejspproductlv2_jsp_38._jspService

找不到纪录阿!!! 还是这条错误
回复
wjfxiao 2002-05-08
你的sqlRst1好象没关啊!就把statement.connection 关掉了!
删掉后报什么错啊?
回复
可乐加水 2002-05-08
这回是什么提示呀
如果你确实是按上面的改的,应该是不会出错的,在检查一下,如过没错,重启一下你的tomcat
回复
jamescheng 2002-05-08
还是不可以阿!! 我把
sqlRst.close();
sqlStmt.close();
sqlCon.close();
统统删除了也没有用啊!!!!!!!!!!!
另外我保证数据库了肯定是有东西的!!
回复
wjfxiao 2002-05-08
斑竹好勤快,又抢先了!呵呵呵
回复
可乐加水 2002-05-08
把后面这部分
<% }
sqlRst.close();
sqlStmt.close();
sqlCon.close(); %>
<% }%>
改成

<% }
sqlRst.close();
}
sqlStmt.close();
sqlCon.close(); %>
这回应该成了


回复
jamescheng 2002-05-08
ok
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告