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를 반환해야 합니다.
먼저 아래 생성자를 사용하여 '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 = ?")그런 다음 인수를 'pStmt'로 설정합니다.이 경우:
prep1.setString(1, username);마지막으로 업데이트를 실행하고 영향을 받는 행을 정수로 가져옵니다.
int affectedRows = pStmt.executeUpdate();
다른 유사한 상황에 대해 지금 이 상황을 살펴보면, 실제로 변경된 사항이 있는 경우에만 추가 작업을 수행하고 싶습니다. 가장 플랫폼 중립적인 방법은 설정된 필드가 일치하는 경우를 제외하도록 쿼리를 변경하는 것입니다.
UPDATE user_table SET Level = 'Super' WHERE Username = ? AND Level <> 'Super'
SQL 업데이트의 영향을 받는 행 수는 SQL%ROWCOUNT(오라클의 경우) 또는 @@ROWCOUNT(SQL SERVER의 경우)를 사용하여 반환할 수 있습니다.
참고: 업데이트, 삭제 등의 행 수를 반환하기 위해.업데이트, 삭제 등의 행 수를 저장하는 저장 프로시저에서 OUT 매개 변수를 사용해야 합니다.
업데이트, 삭제 등의 행 수를 가져오려면 다음과 같이 하십시오.우리는 자바에서 registerOutParameter 메서드를 사용해야 합니다.
업데이트되거나 삭제된 행 수 등을 저장합니다.저장 프로시저에서 OUT 매개 변수 중 하나로 명령을 실행하기 전에 스크립트에서 해당 매개 변수의 유형을 설정해야 합니다. (업데이트 또는 삭제의 경우 숫자가 됩니다.)
명령이 실행되면 해당 매개 변수의 인덱스를 호출하여(예: 저장 프로시저의 OUT 매개 변수가 두 번째 매개 변수인 경우 A=cs.getInt(3)와 같이) 업데이트되거나 삭제된 행의 값을 변수(새 변수 또는 클래스에서 사용할 수 있는 변수 등)에 저장합니다.
이제 변수의 값은 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만 반환됩니다.
- 0--실행 실패
- 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
'programing' 카테고리의 다른 글
| Git 폴더를 하위 모듈로 소급하여 변환하시겠습니까? (0) | 2023.09.04 |
|---|---|
| python으로 gensim의 word2vec 모델을 이용한 문장 유사성 계산 방법 (0) | 2023.08.30 |
| 유형 스크립트에서 JSON 개체를 선언하는 올바른 방법 (0) | 2023.08.30 |
| TypeScript에서 jQuery 자동 완성을 얻으려면 어떻게 해야 합니까? (0) | 2023.08.30 |
| 검색 엔진 크롤러가 Javascript를 실행하지 않는 이유는 무엇입니까? (0) | 2023.08.30 |