영향을 받는 Oracle JDBC batchUpdate 행은 항상 -2(문)입니다.SUCCESS_NO_INFO)
Bulk UPDATE statement를 수행하는 batch process가 있습니다.
Spring JDBC 4.1.6 및 Oracle Jdbc Driver(ojdbc7 및 ucp)를 사용하여 배치 지원을 구현한 후 개별 업데이트 요청(배치 내)에 영향을 받는 레코드 수는 항상 -2(Statement)로 검색됩니다.SUCCESS_NO_INFO).
이 후 INSERT 문으로 동일한 인수를 다시 시도해야 하는데 개별 업데이트 요청(인수가 일괄 설정됨)에 영향을 받는 행을 알 수 있는 방법이 있습니까?
기술적으로 UPSERT 구현으로 개발하려고 합니다.
저는 이 일괄 업데이트를 3가지 다른 방법으로 시도했는데, 세 가지 방법 모두 결과가 같습니다. (Statement만 알려줍니다.SUCCESS_NO_INFO(-2)
방법 1 -- 직접 UCP 연결 및 준비문
connectionPoolMgr.startConnectionPool("mgr_pool");
Connection connection = pds.getConnection();
PreparedStatement pstmt = connection.prepareStatement(dmlSQL);
pstmt.setInt(1, pkId);
pstmt.setInt(2, idx * 10);
pstmt.addBatch();
// EVERY ELEMENT IN THIS ARRAY IS ALWAYS returned as -2
int updatedRows[] = pstmt.executeBatch();
방법 2 - Spring JdbcTemplate 및 batchUpdate()
MapSqlParameterSource[] paramsArray = getSqlParameterList().toArray(new MapSqlParameterSource[0]);
// EVERY ELEMENT IN THIS ARRAY IS ALWAYS returned as -2
int[] batchUpdateResult = getNamedParameterJdbcTemplate().batchUpdate(sqlStatement, paramsArray);
방법 3 - Spring BatchSqlUpdate 구현
BatchInsert batchInsert = new BatchInsert(dataSource);
for (int i = 0; i < count; i++) {
MapSqlParameterSource param = new MapSqlParameterSource();
param.addValue("ID", i + 100);
param.addValue("FIRST_NAME", "Name" + i);
batchInsert.updateByNamedParam(param.getValues());
}
batchInsert.flush();
int rowsAffected[] = batchInsert.getRowsAffected();
class BatchInsert extends BatchSqlUpdate {
private static final String SQL = "UPDATE t_customer_test SET first_name = :FIRST_NAME) WHERE id = :ID";
BatchInsert(DataSource dataSource) {
super(dataSource, SQL);
declareParameter(new SqlParameter(Types.VARCHAR));
declareParameter(new SqlParameter(Types.INTEGER));
setBatchSize(100);
compile();
}
}
12.1부터 오라클 데이터베이스는 배치의 각 요소에 대해 업데이트된 행 수를 반환합니다.12.1 데이터베이스 및 드라이버(12.1.0.2)가 필요합니다.이전 버전의 데이터베이스에는 이 기능이 없습니다.
12.1부터 시작합니다.
int updatedRows[] = pstmt.executeBatch();
실제로 배치의 각 요소에 대해 업데이트된 행의 수를 포함하는 배열을 -2 대신 반환합니다. 그런데 이 기능은 JDBC 씬 드라이버에만 있습니다.
언급URL : https://stackoverflow.com/questions/29296592/oracle-jdbc-batchupdate-rows-affected-is-always-2-statement-success-no-info
'programing' 카테고리의 다른 글
mysqlworkbench를 사용하여 테이블 구조만 내보내기 (0) | 2023.10.09 |
---|---|
관리자와 직원을 연결하는 방법 (0) | 2023.10.09 |
ODP(Oracle에 Array/Table Parameter를 사용하는 방법)ADO를 통해 NET 10g).NET/C#? (0) | 2023.10.09 |
워드프레스 사용자 정의 테이블 또는 사용자 정의 게시물 유형? (0) | 2023.10.09 |
오라클에서 인터벌 함수 (0) | 2023.10.09 |