sql >> Database >  >> RDS >> PostgreSQL

Hoe foutrecords vastleggen met JDBCTemplate batchUpdate in postgreSql?

U krijgt geen BatchUpdateException , omdat je misschien SQLErrorCodeSQLExceptionTranslator in jdbcTemplate , die BatchUpdateException afhandelt s op een speciale manier :

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

Er is een probleem mee:

U kunt dit verminderen als u de SQLStateSQLExceptionTranslator :

jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());

Dan krijgt u de BatchUpdateException als een cause :

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

Maar merk op dat in het geval van postgresql jdbc-stuurprogramma BatchUpdateException#getUpdateCounts() bevat EXECUTE_FAILED alleen, ondanks het feit dat een rij met succes kon worden ingevoegd.

Zie dit probleem




  1. SQL-query gebruikt geen beschikbare index (SQL Server 2008)

  2. Lees Mediumblob-gegevenstype van MYSQL in C #

  3. mySQL>> Normaliseren van een door komma's gescheiden veld

  4. mySQL-query voor het selecteren van kinderen