sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur fångar man felposter med JDBCTemplate batchUpdate i postgreSql?

Du får inte BatchUpdateException , eftersom du kanske använder SQLErrorCodeSQLExceptionTranslator i jdbcTemplate , som hanterar BatchUpdateException s på ett speciellt sätt :

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

Det finns ett problem om det:

Du kan mildra detta om du använder SQLStateSQLExceptionTranslator :

jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());

Då får du BatchUpdateException som en cause :

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

Men Observera att vid postgresql jdbc-drivrutin BatchUpdateException#getUpdateCounts() kommer att innehålla EXECUTE_FAILED endast trots att en rad kunde infogas framgångsrikt.

Se detta problem




  1. SQL-fråga, välj bara om kolumnen inte är null annars välj inte

  2. PostgreSQL Trigger efter uppdatering av en specifik kolumn

  3. hur uppdaterar man ett eller flera fält och ignorerar de tomma fälten i mysql-databasen?

  4. Fästa tabell i Flash-cachen