Запрос и обновление - PullRequest
       1

Запрос и обновление

0 голосов
/ 21 сентября 2018

Я пытаюсь запросить записи в базе данных и обновить их одновременно.поле 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 голосов
/ 21 сентября 2018

Итак, есть пара вещей, которые вам нужно знать / делать.Во-первых, вам нужно извлечь уникальный идентификатор для вашей строки и использовать этот идентификатор в вашем обновлении sql, чтобы указать, какую строку следует обновить.Я собираюсь предположить, что у вас есть столбец ID в вашей таблице пользователей, и использовать его.

Во-вторых, вам нужно получить этот идентификатор в вашем операторе select, а не userSerial, который вы не используете.На самом деле вам нужно получить.

Затем, когда вы проходите цикл, вам нужно уникально обновить значение, основываясь на предложении where в операторе обновления, который вы задаете своим уникальным идентификатором ID.

Я обновил вашу функцию только для демонстрации.Я не проверял это вообще, это просто руководство, чтобы заставить вас двигаться.

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...