Подтвердить что ты не робот

Возвращает количество строк, на которые ссылается оператор SQL UPDATE в Java

Я использую базу данных MySQL и получаю ее через Java.

PreparedStatement prep1 = this.connection.prepareStatement("UPDATE user_table 
                                                               SET Level = 'Super' 
                                                             WHERE Username = ?");
prep1.setString(1, username);

Оператор update выше работает отлично, но я хотел бы получить количество строк, затронутых этим утверждением. Возможно ли это?

4b9b3361

Ответ 1

Вызов executeUpdate() на вашем PreparedStatement должен вернуть int, количество обновленных записей.

Ответ 2

Statement.executeUpdate() или execute(), за которым следует getUpdateCount(), будет возвращено количество совпадающих строк, а не обновлено в соответствии со спецификацией JDBC. Если вы хотите обновить счетчик, вы можете указать useAffectedRows=true как параметр нестандартного URL. Более подробная информация доступна здесь.

Ответ 3

Взглянув на это сейчас, на другую аналогичную ситуацию, где я только хочу сделать дополнительную работу, если что-то действительно изменилось, я думаю, что наиболее нейтральным способом для этой платформы является изменение запроса, чтобы исключить случай, когда заданные поля матч:

UPDATE user_table SET Level = 'Super' WHERE Username = ? AND Level <> 'Super'

Ответ 4

Это число возвращается при запуске запроса:

int rows = prep1.executeUpdate(); 
System.out.printf("%d row(s) updated!", rows); 

Ответ 5

  • Прежде всего, подготовьте объект "PreparedStatement", используя следующий конструктор:

    PreparedStatement pStmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
    //here variable 'sql' is your query ("UPDATE user_table SET Level = 'Super' WHERE Username = ?") 
    
  • Затем установите аргумент 'pStmt'. В этом случае:

    prep1.setString(1, username);
    
  • Наконец, executeUpdate и получить затронутые строки как целое число

    int affectedRows = pStmt.executeUpdate();
    

Ответ 6

Если вам необходимо знать, сколько строк будет затронуто без его выполнения, сначала вам нужно будет выполнить инструкцию SELECT.

Ответ 7

Число строк, затронутых SQL Update, может быть возвращено с использованием SQL% ROWCOUNT (для ORACLE) или @@ROWCOUNT (FOR SQL SERVER)

Примечание. Чтобы вернуть число строк, обновленных, удаленных и т.д., мы должны использовать параметр OUT в хранимой процедуре, который будет хранить количество обновленных строк, удаленных и т.д.

  • Чтобы получить количество обновленных строк, удалить и т.д., мы должны использовать registerOutParameter метод в Java

  • Чтобы сохранить количество обновленных или удаленных строк и т.д. в один из OUT в хранимой процедуре мы должны установить тип этого в нашем script перед выполнением команды. (В случае Обновить или удалить его будет ЧИСЛЕННО)

  • После выполнения команды сохраните значение обновленного или удаленного строки в переменную (это может быть новая переменная или переменные доступный в классе и т.д.) путем вызова индекса этого параметра (например: A = cs.getInt(3), если параметр OUT в хранимой процедуре 2-й параметр)

  • Теперь переменная имеет значение Обновленных или удаленных строк (I.e.A = 10)

Пример для хранимой процедуры

Function demo( A varchar2(10), B OUT NUMBER)RETURN NUMBER IS EXIST_LP NUMBER;
BEGIN
UPDATE demo_temp SET name=A where name="ABC";
B:=SQL%ROWCOUNT -- total number of rows updated
RETRUN EXIST_LP;
END demo;

Пример для java script

public void update(demo demo){
int rowCount = 0;
Connection conn = null;
CallableStatement cs = null;
try{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("your data source path");
conn = ds.getConnection();
cs = conn.prepareCall("BEGIN ? :=demo_dbp.demo(?,?) ); END;"); // stored proc
cs.registerOutParameter(1, Types.INTEGER);
cs.setString(2, "XYZ");
cs.registerOutParameter(3, Types.NUMERIC);
rowCount=cs.execcuteUpdate();
demo.setUpdateCount(cs.getInt(3));
} catch (SQLException exc) {
  throw new DaoException("An SQL Exception has occurred.", exc);
} catch (NamingException ne) {
  throw new DaoException("A Naming Exception has occurred.", ne);
} catch (Exception e) {
  throw new DaoException("An Exception has occurred", e);
} finally {

  try {
            if (cs != null) {
                cs.close();
            }
} catch (SQLException ex1) {
}
try {
            if (conn != null) {
                conn.close();
            }
} catch (SQLException ex) {
}

}
}

Примечание. executeUpdate() не возвращает количество обновленных или удаленных строк. Он просто возвращает 0 или 1.

  • 0 - Ошибка выполнения
  • 1 - Успех выполнения