可能重复:
Getting java.sql.SQLException: Operation not allowed after ResultSet closed
我正在处理一些抛出Operation not allowed after ResultSet closed
例外的代码。这是:
ResultSet res = stmt.executeQuery("SELECT codigo FROM projecto WHERE nome='"
+ auxiliarNomes.elementAt(i).toString() + "'");
while (res.next()) {
codigo = res.getString("codigo");
stmt.executeUpdate("insert into categoriaprojectos values("
+ "'" + codigo + "'" + "," + "'" + Antena.RetornaCodigoProjecto() + "')");
}
我做错了什么?
答案 0 :(得分:6)
看起来像是Getting java.sql.SQLException: Operation not allowed after ResultSet closed的副本。简而言之,您无法对某些ResultSet
的{{1}}进行迭代,并同时对同一Statement
执行更新。
答案 1 :(得分:6)
这是可能的。只需使用额外的连接和声明。
Statement statementOne = connectionOne.createStatement();
Statement statementTwo = connectionTwo.createStatement();
ResultSet resultSetOne = statementOne.executeQuery("select * from x");
while (resultSetOne.next()) {
ResultSet resultSetTwo = statementTwo.executeQuery(String.format("select * from y where xy = %s", resultSetOne.getString(0)));
while (resultSetTwo.next()) {
String result = resultSetTwo.getString(0);
}
}
答案 2 :(得分:3)
您的代码非常脏写,您应该将PreparedStatements
与parametrized SQL statements
一起使用,因为如果没有它们,则存在 SQL注入的巨大危险。这种方法更快,更清洁,更安全!
阅读this
对于您的代码,尝试这样做,您应该使用batch
来插入多个操作。
String SEL_QUERY = "SELECT codigo FROM projecto WHERE nome= ?";
String UPDATE_QUERY = "INSERT INTO categoriaprojectos values(?)";
PreparedStatement ps,ps1 = null;
ResultSet rs = null;
ps = con.prepareStatement(SEL_QUERY);
ps.setYourType(<data>);
rs =stmt.executeQuery();
ps1 = con.prepareStatement(UPDATE_QUERY );
while(rs.next())
{
ps1.setYourType(rs.getType());
ps1.addBatch();
}
ps1.executeBatch();
您应该使用批处理。它更快,更安全,更清洁。 addBatch()
方法将一组参数添加到PreparedStatement
对象的一批命令中。
例如,您将批量执行4次插入,然后您将执行它们质量。此技术被命名为数据集群