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

时间:2015-01-30 18:11:55

标签: java database loops jdbc resultset

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

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

的另一个值
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();  }

getStmt()方法包含创建普通语句的逻辑。见下文:

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

2 个答案:

答案 0 :(得分:1)

我删除了Normal语句的用法,并在我的代码中使用了一个预准备语句。现在这解决了我的问题。

非常感谢。你的人很棒。

答案 1 :(得分:0)

问题是您重复使用相同的Statement来在循环中执行第二个查询。当您对同一个Statement对象执行新查询时,将关闭该同一对象上任何先前打开的语句,包括其结果集。

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

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