sql >> データベース >  >> RDS >> PostgreSQL

postgreSqlでJDBCTemplatebatchUpdateを使用してエラーレコードをキャプチャする方法は?

    BatchUpdateExceptionは発生しません 、 SQLErrorCodeSQLExceptionTranslator jdbcTemplate内 、BatchUpdateExceptionを処理します ■特別な方法で :

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

    それについて問題があります:

    SQLStateSQLExceptionTranslator

    jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());
    

    次に、BatchUpdateExceptionを取得します causeとして :

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

    しかし postgresqljdbcドライバーの場合はBatchUpdateException#getUpdateCounts()であることに注意してください。 EXECUTE_FAILED 一部の行を正常に挿入できたにもかかわらず、のみ。

    これ を参照してください 問題




    1. MySQL/PHPで表示されるレコードを繰り返さないでください

    2. mysqlクエリ結果をCSVに変換します(コピー/貼り付けあり)

    3. PostgreSQLで読み取り専用ユーザーを作成する方法

    4. 同じ固定値を複数の行に挿入します