查询和更新

时间:2018-09-21 10:29:34

标签: java mysql jdbc

我正在尝试查询数据库记录并同时更新。 数据库中的字段UserSerial需要加1才能创建一种内部序列号,我正在使用变量名counter来做到这一点。

运行代码时,我看到计数最高的数字(数据库中的记录数)存储在UserSerial中。

有人可以看看我的代码并告诉我我的错误是什么吗?

public class UsersMenu_Fill_usersSerialNumber {
PreparedStatement statement;
PreparedStatement statementUPD;
private Connection con = null;
private Connection conUPD = null;
private String sql_qry;
private String sql_upd;
int counter = 0;

public void UsersMenu_Fill_usersSerialNumber(){

     DBModule.ConnectDataBase.ConnectDataBase_Method();

     con = DBModule.ConnectDataBase.ConnectDataBase_Method();  
     conUPD = DBModule.ConnectDataBase.ConnectDataBase_Method(); 

    sql_qry = "select UserSerial from users";
    sql_upd = "update users set UserSerial = ?";
    try {
        statement = con.prepareStatement(sql_qry);
        statementUPD = conUPD.prepareStatement(sql_upd);

        ResultSet rslt = statement.executeQuery();

        while (rslt.next()){

            String FieldToChange = rslt.getString("UserSerial");
            int FieldToChange_int = Integer.parseInt(FieldToChange);
            counter++;
            FieldToChange_int = counter;
            statementUPD.setString(1, String.valueOf(FieldToChange_int));
            statementUPD.executeUpdate();

          }
        statement.close();
    } catch (SQLException ex) {
        Logger.getLogger(UsersMenu_Fill_usersSerialNumber.class.getName        ()).log(Level.SEVERE, null, ex);
    }     
   }
}

1 个答案:

答案 0 :(得分:0)

因此,您需要了解/做几件事。首先,您需要为该行拉回一个唯一的标识符,并在更新sql中使用该标识符来指示应更新的行。我将假设您在用户表上有一个ID列,并使用该列。

第二,您需要在select语句中检索该ID,而不是实际上不需要检索的userSerial。

然后,当您遍历时,需要根据使用唯一ID ID指定的update语句中的where子句来唯一地更新值。

我更新您的功能只是为了演示。我根本没有测试过,这只是让您动起来的指南。

public void UsersMenu_Fill_usersSerialNumber(){

    DBModule.ConnectDataBase.ConnectDataBase_Method();

    con = DBModule.ConnectDataBase.ConnectDataBase_Method();
    conUPD = DBModule.ConnectDataBase.ConnectDataBase_Method();

    sql_qry = "select ID from users";
    sql_upd = "update users set UserSerial = ? where ID = ?";
    try {
        statement = con.prepareStatement(sql_qry);
        statementUPD = conUPD.prepareStatement(sql_upd);

        ResultSet rslt = statement.executeQuery();

        while (rslt.next()){
            Long id = statement.getLong("ID");
            counter++;
            statementUPD.setString(1, String.valueOf(counter));
            statementUPD.setLong(2, String.valueOf(id));
            statementUPD.executeUpdate();

        }
        statement.close();
    } catch (SQLException ex) {
        Logger.getLogger(UsersMenu_Fill_usersSerialNumber.class.getName        ()).log(Level.SEVERE, null, ex);
    }
}