Java学习笔记:Exception:Operation not allowed after ResultSet closed

Java学习笔记:Exception:Operation not allowed after ResultSet closed

今天在做一卡通系统时,在圈存模块中出现了一处“错误”,虽然是错误,但竟然没有影响到程序的运行。在这个模块中,用户需要输入所需要圈存的账号和要圈存的金额,然后通过点击圈存按钮来进行圈存,即也是对数据库中用户的信息进行更新。

 在点击按钮上我设置了事件监听器,然后再连接数据库,在刚开始的时候,我先声明了一个statement变量sttmt,然后通过record=sttmt.executeQuery("select....")在数据库中选择出用户名所在的那一行,即在数据库用户余额表中选出所圈存用户的余额,然后将要圈存的金额与剩余金额相加,得到实际又要存的金额,此时,我通过int rows= sttmt.executeUpdate(update。。。)对数据库进行更新并返回所影响的行数,且整个过程通过try..catch ..抛出异常,然而,问题来了,在程序运行时,我能够对账户进行圈存,但却会返回错误提示,即Exception:Operation not allowed after ResultSet closed,即ResultSet变量关闭后不允许进行的操作。

之后我阅读到了这样一段话:

一个stmt多个rs进行操作引起的ResultSet已经关闭错误
一个stmt多个rs进行操作.
那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.
不能互相交替使用,会引起rs已经关闭错误.


我所理解的就是,在sttmt进行选择语句时,即执行select后,此时操作的ResultSet变量record已经关闭,stmmt也已经关闭失去作用,需要重新再声明一个新的Statement变量sttmt_two,再用sttmt_two对数据库进行更新,而事实正是如此,在我使用了sttmt_two.executeUpdate()之后,不仅能够对数据库进行更新,还不会报错。所以一个sttmt只能对应一个resultset变量的操作,若需再对数据库进行操作时,则需要再声明一个Statement变量去对应相应的ResultSet变量去进行操作。

猜你喜欢

转载自blog.csdn.net/wetsion/article/details/48325227