所以我一直在四处寻找这个问题,当一个语句试图获取多个ResultSet时,问题似乎就出现了。
但在下面的代码中,我得到了异常,尽管executeUpdate只返回了一个int
ResultSet resultsRS = statement.executeQuery("select distinct snum from shipments where quantity >= 100");
int rowCount=0;
while(resultsRS.next()){
statement.executeUpdate("UPDATE suppliers SET status = status + 5 WHERE snum = "+"""+resultsRS.getString(1)+""");
rowCount++;
}
它运行一次很好,之后它会给出异常。我该如何解决这个问题?
Statement接口中的所有执行方法都会隐式关闭语句的当前ResultSet。请参阅文档,因此您需要将resultSet数据存储在一个临时数组中并循环使用
或者尝试使用另一条语句执行更新。
试试这样的东西:
ArrayList<String> tmp = new ArrayList<String>();
while(resultsRS.next()){
tmp.add(resultsRS.getString(1));
}
for (String s: tmp) {
statement.executeUpdate("UPDATE suppliers SET status = status + 5 WHERE snum = "+"""+s+""");
rowCount++;
}