我正在尝试查询数据库记录并同时更新。
数据库中的字段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);
}
}
}
答案 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);
}
}