java. sql .BatchUpdateException: ORA-01849: время должно быть от 1 до 12 - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь сохранить текущую метку времени в базе данных Oracle, используя JdbcTemplate. Есть два столбца, в которых я пытаюсь сохранить метку времени, но один столбец - VARCHAR, а другой - TIMESTAMP, но, глядя на исключение, я не могу выяснить, для какого столбца он выдает ошибку выше, и лучшая часть находится на На моей локальной машине такой ошибки нет, но при развертывании кода в более высокой среде я сталкиваюсь с такой проблемой.

Запрос-

 String query = "insert into IP_CO_WR2_USR.customer_info "
            + "(EVENT_ID,COMM_CODE,customer_id,REG_ACCOUNT"
            + ",DFMSTATEMENTFLAG,ENVIRONMENT,STATUS,"
            + "INSERT_TIMESTAMP,INSERTED_BY,UPDATE_TIMESTAMP,MODELLINKDATE,"
            + "OCCURANCE_TIMESTAMP,COMM_SOURCE,REPORTENDDATE,MODELID,UAN,BENCHMARKID,"
            + "COUNTER,DFMUAN,RUNTYPE,GENERATED_EVENT_ID)"
            + " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 

Логи вставки данных c

        coJdbcTemplate.batchUpdate(query, new BatchPreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                CustomerInfo tranMessage = batch.get(i);
                ps.setString(8, new SimpleDateFormat("dd-MMM-yy HH.mm.ss")
                        .format(new Date()));
                ps.setString(9, StringConstants.TMTriggerManager);
                ps.setString(10, new SimpleDateFormat("dd-MMM-yy HH.mm.ss")
                        .format(new Date()));

            }

            public int getBatchSize() {
                return batch.size();
            }
        });

1 Ответ

1 голос
/ 06 марта 2020

Вы используете неправильный формат в SimpleDateFormat

ps.setString(8, new SimpleDateFormat("dd-MMM-yy HH.mm.ss").format(new Date()));

Вам необходимо использовать:

ps.setString(8, new SimpleDateFormat("dd-MMM-yy hh.mm.ss").format(new Date()));

«ЧЧ» в верхний регистр устанавливает часы между 1 и 24. 'hh' решает его.

Документацию по SimpleDateFormat можно найти в https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

Возможно, вы разрешили обработку часов от 0 до 24 в вашей локальной базе данных и на сервере нет. Другой вариант - изменить это в этой базе данных

...