Operation not allowed after ResultSet closed

  1. 首先应该按照网上搜到的方法检查一下是否是一个statement对多个ResultSet进行操作。

比方说:

Statement st = conn.CreateStatement();

ResultSet rs1 = st.executeQuery();

ResultSet rs2 = st.executeQuery();

则必须先对rs1进行操作,然后再对rs2进行操作,不能交替操作。否则会引起rs已经关闭错误,因为执行第三条语句的时候,程序默认将rs2关闭,再对rs2进行操作的时候,就会发生上面描述的错误。

2.  即在我的程序中所犯的错误:

下面是一个递归程序用来读取数据库中的帖子。


wKiom1VCGieStj3mAALDAqy594Q621.jpg


在一个tree函数中传入三个参数:一个数据库连接,一个父节点,一个层数。

在想了好久之后,觉得自己是不是在递归的里层将rs close掉,导致外层使用不便啊,后来一想,这是递归程序,不会出现这种问题。顺着这个思路往下走,突然发现自己犯了一个很低级的错误:在递归里层将Connection变量关闭掉了,自然ResultSet也跟着关闭了,这才出现题目的那种错误。

3. 关于JSP的调试方法:

MyEclipse环境下,对于JSP程序进行断点调试,感觉不太方便,不如System.out.println语句来得实在。

如上图所示,我在while循环之后,添加了一行打印语句,顺藤摸瓜慢慢缕清了思路。

4. 心得:

遇到bug一定不要急躁,遇到问题才是提升能力的机会,所谓的经验,其实就是解决的一个又一个的问题的累加。要想着自己一定能克服,要幻想着程序成功运行之后的喜悦,耐心的思考,才有可能找到问题的根源。


你可能感兴趣的:(jsp,ResultSet)