sql >> Databáze >  >> RDS >> PostgreSQL

Jak zachytit chybové záznamy pomocí JDBCTemplate batchUpdate v postgreSql?

Nezískáte BatchUpdateException , protože můžete použít SQLErrorCodeSQLExceptionTranslator v jdbcTemplate , který zpracovává BatchUpdateException s zvláštním způsobem :

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

Je v tom problém:

Tento problém můžete zmírnit, pokud použijete SQLStateSQLExceptionTranslator :

jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());

Poté získáte BatchUpdateException jako cause :

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

Ale všimněte si, že v případě ovladače postgresql jdbc BatchUpdateException#getUpdateCounts() bude obsahovat EXECUTE_FAILED pouze, navzdory skutečnosti, že některý řádek mohl být úspěšně vložen.

Viz toto problém




  1. Zobrazte výsledky ve více html tabulkách

  2. MySQL uděluje uživateli oprávnění k databázi

  3. ODP.NET Jak předat pole řetězců do uložené procedury Oracle?

  4. Nejlepší postup pro ukládání vícejazyčných řetězců