Java 循环遍历结果集,我需要在满足条件时更新一个表

Java 循环遍历结果集,我需要在满足条件时更新一个表,java,database,loops,jdbc,resultset,Java,Database,Loops,Jdbc,Resultset,我的代码中有一个循环。它迭代结果集。只要qc=0,它就应该更新数据库中的一个表 但它只是在第一次遇到qc=0时才更新数据库表。然后它就从while循环中出来了。它不会在下一次迭代中检查“qc”的另一个值 我已经删除了普通语句的用法,并在代码中使用了一个准备好的语句。现在这解决了我的问题 非常感谢。你们真是太棒了。问题是重复使用相同的语句来执行循环中的第二个查询。在同一语句对象上执行新查询时,将关闭该对象上以前打开的所有语句,包括它们的结果集 我有点惊讶,您没有收到结果集关闭的SQLExcepti

我的代码中有一个循环。它迭代结果集。只要
qc=0
,它就应该更新数据库中的一个表

但它只是在第一次遇到
qc=0
时才更新数据库表。然后它就从while循环中出来了。它不会在下一次迭代中检查“qc”的另一个值


我已经删除了普通语句的用法,并在代码中使用了一个准备好的语句。现在这解决了我的问题


非常感谢。你们真是太棒了。

问题是重复使用相同的
语句来执行循环中的第二个查询。在同一
语句
对象上执行新查询时,将关闭该对象上以前打开的所有语句,包括它们的结果集

我有点惊讶,您没有收到结果集关闭的
SQLException


还要注意,像您的
DatabaseConnection
这样的类有点奇怪,因为它使正确管理JDBC资源变得更困难,而不是更容易。

我建议更改执行SQL的方式,以使用
PreparedStatements
。这是为了防止SQL注入您有SQL注入漏洞。您可以通过使用带有占位符的
PreparedStatements
将其删除,稍后您将使用这些占位符设置为要在查询中使用的数据,例如使用
stmt.setInt(1,pdno)“然后它只是从while循环中出来。它不会进入下一次迭代”while update代码是否可能引发异常,从而中断循环?我们可以看看您如何处理
SQLException
?不要只将重要信息作为注释发布(特别是当它是无法在注释中正确格式化的代码示例时)。相反,请使用选项将其添加到您的问题中。您是否可以从Eclipse或其他版本向我们显示任何错误代码?
String sql5 =  "select  t$pdno ,t$opno, t$qcmp , t$qtbf from ttisfc010100 where t$pdno = "+pdno+" and t$opno <= "+opno ;
ResultSet getData3 = db.getStmt().executeQuery(sql5);
while(getData3.next()) {
    int pd , op , qc , qt ;
    pd = getData3.getInt(1);
    op = getData3.getInt(2);
    qc = getData3.getInt(3);
    qt = getData3.getInt(4);
    String sql7="";
    if(qc==0)
    {
       sql7 = "update ttisfc010100 set t$qcmp = "+quantity+" , t$qtbf = "+quantity+"   where t$pdno = "+pd+" and t$opno = "+op;
       db.getStmt().executeUpdate(sql7); 
    }    
}
catch (SQLException e) {

e.printStackTrace();  }
public class DatabaseConnection 
{

Statement stmt;

public void openConnection() {
    Class.forName(classForName);
    conn = DriverManager.getConnection(driver+dsn, user, password); 
    stmt = conn.createStatement();
}

public Statement getStmt()
{
    if(stmt==null)
    {

       stmt = this.getNewStmt();

    }

    return stmt;
}

public Statement getNewStmt() {
    Statement newStmt;
    try {
        newStmt = conn.createStatement();
    }
    catch(Exception e){
        newStmt = stmt;
    }

    return newStmt;
}