PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przechwytywać rekordy błędów za pomocą JDBCTemplate batchUpdate w postgreSql?

Nie otrzymujesz BatchUpdateException , ponieważ możesz użyć SQLErrorCodeSQLExceptionTranslator w jdbcTemplate , który obsługuje BatchUpdateException s w specjalny sposób :

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

Jest z tym problem:

Możesz to złagodzić, jeśli użyjesz SQLStateSQLExceptionTranslator :

jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());

Następnie otrzymasz BatchUpdateException jako cause :

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

Ale zauważ, że w przypadku sterownika jdbc postgresql BatchUpdateException#getUpdateCounts() będzie zawierać EXECUTE_FAILED tylko, pomimo faktu, że niektóre wiersze można było wstawić z powodzeniem.

Zobacz to wydanie




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz rolę PostgreSQL 9 z loginem (użytkownikiem) tylko po to, aby wykonywać funkcje

  2. Jak utworzyć klucz obcy z ograniczeniem na odnośną tabelę w PostgreSQL?

  3. Sekwencja Django i PostgreSQL dla autoinkrementacji klucza podstawowego

  4. Połącz tabele w kolumnach złożonego klucza obcego/podstawowego w zapytaniu

  5. GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server?