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()){一行的错误?? 展开
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()){一行的错误?? 展开
4个回答
展开全部
在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>";
}
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循环里面再查,不是很明白你想查询什么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select * from "+tablename+" where id = 1 查询的结果只有一条记录
rsst2.next() 这句你不感觉矛盾么。既然知道只有一条记录。为啥还要迭代呢????
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");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
去掉cnn.commit();
cnn.setAutoCommit(true);
cnn.setAutoCommit(true);
追问
为什啊 ??结果是对的!
追答
cnn.commit();是手动提交cnn.setAutoCommit(true); 是设置成自动提交
在查看下java api 可以看到
commit();此方法应该只在已禁用自动提交模式时使用。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议楼主别把java代码 写在jsp里。
追问
我是学习阶段 请问我的问题哪里错了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询