Как обрабатывать исключение внутри setValue () jdbcTemplate.batchUpdate? - PullRequest
0 голосов
/ 08 мая 2020

Мне нужно обновить таблицу только при определенных условиях. Итак, для ложного сценария ios, в котором я не хочу обновлять БД, я не устанавливаю никаких значений в индексе моего запроса, который бросает Exception BadSqlGrammarException и после получения я не могу вставить оставшиеся значения.

Итак, я хочу обработать Exception внутри setValue() из jdbcTemplate.batchUpdate, чтобы даже в случае появления Exception я мог обновить оставшиеся столбцы.

Вот мой код:

public HashMap<String, Object> updatePanelistIdsState(RejectPanelistBean rejectPanelistBean) {
    String sql="", rowData[];
    CommonsMultipartFile file=null;
    int affectedRecords=0,x[]=null;

    final HashMap<String, Object> map = new HashMap<String,Object>();
    try{
        sql = "UPDATE lu_registration " +
            "SET admin_approval_status = ? , reject_reason = ?, reject_date = ?  where panelist_id = ?";

        file=rejectPanelistBean.getRejectPanelistIdFile();
        rowData = file.getFileItem().getString().trim().split("\n");
        System.out.println("size"+rowData.length);
        final String[] finalData = Arrays.copyOfRange(rowData, 1, rowData.length);
        x = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            int p2r = 0, p2s = 0, p2a = 0;
            int s2r = 0, s2p = 0, s2a = 0;
            int a2r = 0, a2s = 0, a2p = 0;
            int a2a = 0, s2s = 0, p2p = 0;
            int r2any = 0;
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                String temp="", cells[] = finalData[i].split("\\s*,\\s*");
                String sqlInsert = "insert into panelist_approval_track (panelist_id, prev_admin_approval_status, " +
                        "admin_approval_status,reason,reviewed_by,reviewed_on) " +
                        "values " +
                        "(?,?,?,?,?,now())";
                String sqlInsertApprove = "insert into panelist_approval_track (panelist_id, prev_admin_approval_status, " +
                        "admin_approval_status,reviewed_by,reviewed_on) " +
                        "values " +
                        "(?,?,?,?,now())";

                LoginBean login = (LoginBean)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
                String loggedUserId = login.getEmployeeId();

                String currentStatus = cells[1];
                String prevStatus = jdbcTemplate.queryForObject("SELECT admin_approval_status FROM lu_registration WHERE panelist_id = " + cells[0], String.class);
                switch (prevStatus) {
                case "P": // -- Case 1
                    switch (currentStatus) {
                    case "R":
                        ps.setString(1, cells[1]);
                        ps.setString(2, cells[2]);
                        ps.setTimestamp(3, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()));
                        ps.setString(4, cells[0]);
                        jdbcTemplate.update(sqlInsert, cells[0], prevStatus, currentStatus, cells[2], loggedUserId);
                        p2r++;
                        break;
                    case "S":
                        p2s++;
                        break;
                    case "A":
                        p2a++;
                        break;
                    default:
                        ps.setString(1, cells[1]);
                        ps.setString(2, cells[2]);
                        ps.setNull(3, java.sql.Types.DATE);
                        ps.setString(4, cells[0]);
                        jdbcTemplate.update(sqlInsert, cells[0], prevStatus, currentStatus, cells[2], loggedUserId);
                        p2p++;
                        break;
                    }
                    break;
                default: // -- r2any
                    r2any++;
                    break;

                    }
                    map.put("p2r", p2r);
                    map.put("p2s", p2s);
                    map.put("p2a", p2a);
                    map.put("r2any", r2any);
            }

            @Override
            public int getBatchSize() {
                System.out.println("final Len: "+finalData.length);
                return finalData.length;
            }

        });
        for(int i:x)
            affectedRecords+=i;

        map.put("affectedRecords", affectedRecords);
        map.put("affectedBool", affectedRecords>0);
        return map;
    }catch(Exception e)
    {
        System.out.println("Exception In  updatePanelistIdsState: "+e);
        e.printStackTrace();
    }
    map.put("affectedBool", false);
    return map;
}

Вы могли видеть, что в некоторых случаях я не устанавливаю никаких значений в ps (и которые мне не нужны), но из-за этого оставшиеся столбцы не умеют обновлять. Как работать без сбоев, даже если возникает Exception?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...