java mysql 简易bbs报错:Operation not allowed after ResultSet closed

<%Stringtablename=null;Stringartname="<tr><td>";Class.forName("com.mysql.jdbc.Driver"... <%
String tablename = null;
String artname = "<tr><td>";
Class.forName("com.mysql.jdbc.Driver");
Connection cnn = DriverManager.getConnection("jdbc:mysql://localhost/bbs?user=root&password=root");
cnn.setAutoCommit(false);
Statement stmt = cnn.createStatement();
ResultSet rsst1 = stmt.executeQuery("show tables");
ResultSet rsst2 = null;
while(rsst1.next()){
tablename = rsst1.getString("tables_in_bbs");
rsst2 = stmt.executeQuery("select * from "+tablename+" where id = 1");
//if(rsst2.next())
//artname += rsst2.getString("title")+"<td></tr>";
}
cnn.commit();
cnn.setAutoCommit(true);
rsst2.close();
rsst1.close();
stmt.close();
cnn.close();
%>我想把每个table中的id为1 的那个title显示出来;
没有这句话时rsst2 = stmt.executeQuery("select * from "+tablename+" where id = 1");
表的名字 也就是tablename显示正常, 但有个上面那句话 就会包报 如题 那句错误!
而且说是while(rsst1.next()){一行的错误??
展开
 我来答
B斗地主
2011-04-19 · TA获得超过146个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:82万
展开全部
在rsst2之前就应把rsst1关闭掉,不要到后面才关闭
rsst1.close();
sst2 = stmt.executeQuery("select * from "+tablename+" where id = 1");
下面这里想实现什么?
while(rsst1.next()){
tablename = rsst1.getString("tables_in_bbs");
rsst2 = stmt.executeQuery("select * from "+tablename+" where id = 1");
//if(rsst2.next())
//artname += rsst2.getString("title")+"<td></tr>";
}
追问
更离谱了!关了它 while(rsst1.next()){怎么办啊??
追答
stmt只可以有一个结果集,在while循环里面再查,不是很明白你想查询什么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
嘚瑟的小蹦蹦
2011-04-19 · TA获得超过108个赞
知道答主
回答量:105
采纳率:50%
帮助的人:36.7万
展开全部
select * from "+tablename+" where id = 1 查询的结果只有一条记录
rsst2.next() 这句你不感觉矛盾么。既然知道只有一条记录。为啥还要迭代呢????
更多追问追答
追问
不是那里的错误 !我把//if(rsst2.next())  注释掉了啊 就是报了上述错误
追答
一个stmt最好对应一个rsst, 如果用一个时间内用一个stmt打开两个rsst同时操作,会出现这种情况.所以解决此类问题:1.就多创建几个stmt,一个stmt对应一个rs;2.若用一个stmt对应多个rs的话,那只能得到一个rs后就操作,处理完第一个rs后再处理其他的,如上"正确代码".多个stmt对应各自的 rsst.
stmt=conn.createStatement();
stmt2=conn.createStatement();
rsst1=stmt.executeQuery("select * from t1");
rsst2=stmt2.executeQuery("select * from t2");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
潮福开3914
2011-04-19 · TA获得超过482个赞
知道小有建树答主
回答量:301
采纳率:37%
帮助的人:94.1万
展开全部
去掉cnn.commit();
cnn.setAutoCommit(true);
追问
为什啊 ??结果是对的!
追答
cnn.commit();是手动提交cnn.setAutoCommit(true); 是设置成自动提交
在查看下java api 可以看到
commit();此方法应该只在已禁用自动提交模式时使用。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jeffsui
2011-04-19 · TA获得超过606个赞
知道小有建树答主
回答量:737
采纳率:50%
帮助的人:304万
展开全部
建议楼主别把java代码 写在jsp里。
追问
我是学习阶段 请问我的问题哪里错了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式