我有以下例外:
这里是相关的代码部分: Server.Proxy.update_allLogOut :(第65行是while括号)
public void update_allLogOut ()
{
try
{
ResultSet rs;
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM sysuser WHERE login=1");
while(rs.next())
{
stmt.executeUpdate("UPDATE sysuser SET login=0");
}
rs.close();
} catch (SQLException e) {e.printStackTrace();}
}
Server.Server:
public Server(int port)
{
super(port);
func.update_allLogOut();
}
主:
Server sv = new Server(5555);
我必须指出99%的时间它没有例外运行..但有几次我得到这个例外,我无法弄清楚它为什么会发生。有任何想法吗?很明显,某些事情做错了,但这里所有类似的主题都没有给出答案......
答案 0 :(得分:3)
您正在使用stmt
来迭代循环内SELECT
和UPDATE
的结果。从执行UPDATE
开始,此操作无效,与SELECT
关联的结果集将关闭。
要修复,请使用两个单独的Statement
个对象。
答案 1 :(得分:1)
我不确定,这块:
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM sysuser WHERE login=1");
while(rs.next())
{
stmt.executeUpdate("UPDATE sysuser SET login=0");
}
rs.close();
是个好主意。
为什么不执行简单查询:UPDATE sysuser SET login=0 WHERE login=1
?
此外,在stmt
循环内使用相同的while
- 这是一个粗略的错误。