java.sql.BatchUpdateException:ORA-01849:小时必须在1到12之间

问题描述 投票:0回答:1

我正在尝试使用JdbcTemplate将当前时间戳存储在Oracle数据库中。我尝试在其中存储时间戳的两列,但一列是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 (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 

数据插入逻辑

        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();
            }
        });
java oracle jdbctemplate
1个回答
0
投票

您在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()));

[HH]以大写形式设置,介于1到24之间。'hh'解决了该问题。

您可以在https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html中查看SimpleDateFormat的文档

© www.soinside.com 2019 - 2024. All rights reserved.