programing

Java에서 SQL UPDATE 문의 영향을 받는 행 수를 반환합니다.

iphone6s 2023. 8. 30. 21:28
반응형

Java에서 SQL UPDATE 문의 영향을 받는 행 수를 반환합니다.

저는 MySQL 데이터베이스를 사용하고 있으며 Java를 통해 액세스하고 있습니다.

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

위의 업데이트 문은 정상적으로 작동하지만 이 문에 영향을 받는 행 수를 알고 싶습니다.이것이 가능합니까?

Statement.executeUpdate()또는execute()다음에getUpdateCount()JDBC 사양에 따라 업데이트되지 않고 일치하는 행 수를 반환합니다.업데이트된 카운트를 원하는 경우 다음을 지정할 수 있습니다.useAffectedRows=true비표준 URL 옵션으로 사용할 수 있습니다.자세한 내용은 여기를 참조하십시오.

Prepared Statement에서 executeUpdate()를 호출하면 업데이트된 레코드의 개수인 int를 반환해야 합니다.

  1. 먼저 아래 생성자를 사용하여 'Prepared Statement' 개체를 준비합니다.

    PreparedStatement pStmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
    //here variable 'sql' is your query ("UPDATE user_table SET Level = 'Super' WHERE Username = ?") 
    
  2. 그런 다음 인수를 'pStmt'로 설정합니다.이 경우:

    prep1.setString(1, username);
    
  3. 마지막으로 업데이트를 실행하고 영향을 받는 행을 정수로 가져옵니다.

    int affectedRows = pStmt.executeUpdate();
    

다른 유사한 상황에 대해 지금 이 상황을 살펴보면, 실제로 변경된 사항이 있는 경우에만 추가 작업을 수행하고 싶습니다. 가장 플랫폼 중립적인 방법은 설정된 필드가 일치하는 경우를 제외하도록 쿼리를 변경하는 것입니다.

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

SQL 업데이트의 영향을 받는 행 수는 SQL%ROWCOUNT(오라클의 경우) 또는 @@ROWCOUNT(SQL SERVER의 경우)를 사용하여 반환할 수 있습니다.

참고: 업데이트, 삭제 등의 행 수를 반환하기 위해.업데이트, 삭제 등의 행 수를 저장하는 저장 프로시저에서 OUT 매개 변수를 사용해야 합니다.

  1. 업데이트, 삭제 등의 행 수를 가져오려면 다음과 같이 하십시오.우리는 자바에서 registerOutParameter 메서드를 사용해야 합니다.

  2. 업데이트되거나 삭제된 행 수 등을 저장합니다.저장 프로시저에서 OUT 매개 변수 중 하나로 명령을 실행하기 전에 스크립트에서 해당 매개 변수의 유형을 설정해야 합니다. (업데이트 또는 삭제의 경우 숫자가 됩니다.)

  3. 명령이 실행되면 해당 매개 변수의 인덱스를 호출하여(예: 저장 프로시저의 OUT 매개 변수가 두 번째 매개 변수인 경우 A=cs.getInt(3)와 같이) 업데이트되거나 삭제된 행의 값을 변수(새 변수 또는 클래스에서 사용할 수 있는 변수 등)에 저장합니다.

  4. 이제 변수의 값은 Updateed 또는 deleted 행(예: 업데이트됨 또는 삭제됨)입니다.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;

자바 스크립트의 예

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만 반환됩니다.

  1. 0--실행 실패
  2. 1-실행 성공

이 숫자는 쿼리를 실행할 때 반환됩니다.

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

실행하지 않고 영향을 받는 행 수를 알아야 할 경우 먼저 SELECT 문을 실행해야 합니다.

언급URL : https://stackoverflow.com/questions/2571915/return-number-of-rows-affected-by-sql-update-statement-in-java

반응형