Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC异常:结果集关闭后不允许操作_Java_Sql_Exception_Jdbc - Fatal编程技术网

Java JDBC异常:结果集关闭后不允许操作

Java JDBC异常:结果集关闭后不允许操作,java,sql,exception,jdbc,Java,Sql,Exception,Jdbc,可能重复: 我正在处理一些代码,这些代码在ResultSet关闭后抛出操作不允许异常。这是: ResultSet res = stmt.executeQuery("SELECT codigo FROM projecto WHERE nome='" + auxiliarNomes.elementAt(i).toString() + "'"); while (res.next()) { codigo = res.getString("codigo"); stmt.execu

可能重复:

我正在处理一些代码,这些代码在ResultSet关闭后抛出
操作不允许
异常。这是:

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() + "')");
}

我做错了什么?

看起来像是复制品。简而言之,您不能从某个
语句
中迭代
结果集
,同时在同一
语句
上执行更新。

看起来像是的副本。简而言之,您不能从某个
语句
中迭代
结果集
,同时对同一
语句
执行更新。

这是可能的。只需使用一个额外的连接和语句

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);
    }
}

这是可能的。只需使用一个额外的连接和语句

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);
    }
}

您的代码写得非常脏,您应该将
PreparedStatements
参数化SQL语句一起使用,因为没有它们,SQL注入的危险很大。这种方法更快、更干净、更安全!
阅读

对于您的代码,尝试这样做,您应该使用
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();
String SEL_QUERY=“从projecto中选择codigo,其中nome=?”;
字符串UPDATE_QUERY=“插入分类项目值(?);
PreparedStatement ps,ps1=null;
结果集rs=null;
ps=合同准备声明(选择查询);
ps.setYourType();
rs=stmt.executeQuery();
ps1=con.prepareStatement(更新查询);
while(rs.next())
{
ps1.setYourType(rs.getType());
ps1.addBatch();
}
ps1.executeBatch();
您应该为此使用批处理。它更快、更安全、更清洁
addBatch()
方法将一组参数添加到
PreparedStatement
对象的批命令中。
例如,您将批量执行4个插入,然后批量执行。这种技术称为数据群集

如果您的代码写得非常,您应该将
PreparedStatements
参数化SQL语句一起使用,因为没有它们,SQL注入就有很大的危险。这种方法更快、更干净、更安全!
阅读

对于您的代码,尝试这样做,您应该使用
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();
String SEL_QUERY=“从projecto中选择codigo,其中nome=?”;
字符串UPDATE_QUERY=“插入分类项目值(?);
PreparedStatement ps,ps1=null;
结果集rs=null;
ps=合同准备声明(选择查询);
ps.setYourType();
rs=stmt.executeQuery();
ps1=con.prepareStatement(更新查询);
while(rs.next())
{
ps1.setYourType(rs.getType());
ps1.addBatch();
}
ps1.executeBatch();
您应该为此使用批处理。它更快、更安全、更清洁
addBatch()
方法将一组参数添加到
PreparedStatement
对象的批命令中。
例如,您将批量执行4个插入,然后批量执行。这种技术称为数据群集

搜索“SQL注入”,并找出SQL构造错误的原因搜索“SQL注入”并找出SQL构造错误的原因当然也可以使用executeUpdate代替第二个查询当然也可以使用executeUpdate代替第二个查询