sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan fanges fejlregistreringer ved hjælp af JDBCTemplate batchUpdate i postgreSql?

Du får ikke BatchUpdateException , fordi du måske bruger SQLErrorCodeSQLExceptionTranslator i jdbcTemplate , som håndterer BatchUpdateException s på en særlig måde :

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

Der er et problem om det:

Du kan afbøde dette, hvis du bruger SQLStateSQLExceptionTranslator :

jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());

Så får du BatchUpdateException som en cause :

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

Men Bemærk, at i tilfælde af postgresql jdbc driver BatchUpdateException#getUpdateCounts() vil indeholde EXECUTE_FAILED kun på trods af, at en række kunne indsættes med succes.

Se dette problem




  1. Sådan fungerer statiske vs singleton-klasser (databaser)

  2. Vis sammenkædede værdier i SQL Query

  3. PHP - henter forberedt stmt ind i klassen:Fatal Error-klassen blev ikke fundet

  4. Vælg Data ved afkrydsningsfeltet, klik på næste og fjern markeringen af ​​den valgte række