Массовая вставка пружинного jdbc шаблона для выявления сбойных записей - PullRequest
0 голосов
/ 27 сентября 2019

Я использую шаблон Spring JDBC для массовой вставки данных в базу данных.Я могу сделать для положительной вставки, но застрял, чтобы определить сбойные записи, так как у меня есть сценарий для вставки сбойных записей в таблицу ошибок и положительных записей в другую таблицу.

Найдите приведенный ниже код, которыйя пытаюсь.**

final int batchSize = 5;
            int[] resultCount = null;
            for (int j = 0; j < bulkDataList.size(); j += batchSize) {
                final List<BulkTest> batchList = bulkDataList.subList(j, j + batchSize > bulkDataList.size() ? bulkDataList.size() : j + batchSize);
                try{
                     resultCount = jdbcTemplate.batchUpdate("INSERT INTO BULK_TEST VALUES (?, ?)",
                            new BatchPreparedStatementSetter() {
                                @Override
                                public void setValues(PreparedStatement ps, int i)
                                        throws SQLException {
                                    BulkTest bulkObj = batchList.get(i);  ps.setString(1, bulkObj.getRowNo());
                                    ps.setString(2, bulkObj.getName());
                                }
                                @Override
                                public int getBatchSize() {
                                    return batchList.size();
                                }
                            });
                }catch (Exception e) {
                    e.printStackTrace();
                    logger.info("Exception occured in batch update ==>");
                    if (e.getCause() instanceof BatchUpdateException) {
                        BatchUpdateException be = (BatchUpdateException) e.getCause();
                        int[] batchRes = be.getUpdateCounts();
                        if (batchRes != null && batchRes.length > 0) {
                            for (int index = 0; index < batchRes.length; index++) {
                                if (batchRes[index] == Statement.EXECUTE_FAILED) {
                                    logger.error("Error execution >>>>>>>>>>>"
                                            + index + " --- , codeFail : " + batchRes[index]
                                            + "---, line " + bulkDataList.get(index));
                                }
                            }
                        }
                    }  
                }
            }
            logger.info("Final processed results ==>"+resultCount);
    }

**

1) В операции массового пакетного обновления, если я получаю нулевой указатель или какое-либо исключение из ограничения БД, он выбрасывает класс исключения, а не BatchUpdateException.

Я знаю, что из BatchUpdateException мы можем получить ошибочные записи.

Пожалуйста, поделитесь кодом для идентификации успешно вставленных и неудачных записей.

...