sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo capturar registros de errores usando JDBCTemplate batchUpdate en postgreSql?

No obtiene BatchUpdateException , porque podría usar SQLErrorCodeSQLExceptionTranslator en jdbcTemplate , que maneja BatchUpdateException s de una manera especial :

if (sqlEx instanceof BatchUpdateException && sqlEx.getNextException() != null) {
    SQLException nestedSqlEx = sqlEx.getNextException();
    if (nestedSqlEx.getErrorCode() > 0 || nestedSqlEx.getSQLState() != null) {
        sqlEx = nestedSqlEx;
    }
}

Hay un problema al respecto:

Puede mitigar esto si usa SQLStateSQLExceptionTranslator :

jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());

Luego obtendrá la BatchUpdateException como una cause :

try {
    // ...
} catch (DataAccessException e) {
    Throwable cause = e.getCause();
    logger.info("cause instanceof BatchUpdateException = {}", cause instanceof BatchUpdateException);
 }

Pero tenga en cuenta que en el caso del controlador postgresql jdbc BatchUpdateException#getUpdateCounts() contendrá EXECUTE_FAILED solo, a pesar de que alguna fila se pudo insertar con éxito.

Ver esto problema