当前位置: 首页 > 知识库问答 >
问题:

在Oracle数据库中使用JdbcTemplate插入时间戳(ORA-01858)

漆雕亮
2023-03-14

我已经读了很多关于这个错误的东西,但仍然没有发现错误。

        private static final String INSERT_CITAS = "INSERT INTO CITAS (" 
        + "idCita, idServicio, " + "fechaCita, "
        + "idEstado, idUsuarioInicial) " + "VALUES (?, ?, ?, ?, ?)";

        Object[] params = {
                idCita,
                citaQuenda.getIdServicio(),
                getDateToDBFormat(citaQuenda.getFechaCita()),
                ESTADO_INICIAL,
                USUARIO_INICIAL };

        String queryCitas = INSERT_CITAS;

        super.getJdbcTemplate().update(queryCitas, params);


        protected String getDateToDBFormat(Date fechaCreacion){
        return  "TO_TIMESTAMP('" + 
                    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(fechaCreacion)
                    + "', 'yyyy-mm-dd hh24:mi:ss')" ;
        }
    org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [INSERT INTO citas_55 (idCita, idServicio, fechaCita, idEstado, idUsuarioInicial) VALUES (?, ?, ?, ?, ?)];
    ORA-01858: a non-numeric character was found where a numeric was expected

作为我的params:[461,100,TO_TIMESTAMP('2015-01-28 00:00:01','yyyy-mm-dd hh24:mi:ss'),18888]这实际上是有效的。

    INSERT INTO citas (idCita, idServicio, fechaCita, idEstado, idUsuarioInicial) VALUES (457, 100, TO_TIMESTAMP('2015-01-28 00:00:01', 'yyyy-mm-dd hh24:mi:ss') , 1, 8888);

任何形式的帮助都将不胜感激。提前感谢!

共有1个答案

苏振国
2023-03-14

不要在日期/时间戳和字符串之间来回转换。

只需将java.sql.timestamp实例作为参数传递:

Object[] params = {
         idCita,
         citaQuenda.getIdServicio(),
         new java.sql.Timestamp(citaQuenda.getFechaCita()),
         ESTADO_INICIAL,
         USUARIO_INICIAL };

String queryCitas = INSERT_CITAS;
super.getJdbcTemplate().update(queryCitas, params);
 类似资料:
  • 我在date所在的表中看到的日期类型是:05-Feb-1909.36.10.000000000AM,并且我在创建表时将其声明为时间戳类型。 在JSP文件中,我有以下2个输入类型: 在Servlet Java中,我有以下内容: 在各种尝试和试验之间,我无法解释,如果我在Oracle SQL Developer中执行类似的操作,所有操作都如何正常工作!: 当我从servlet中运行完全相同的查询时,我

  • 我们有带有日期字段(类型date)的表,将时间戳插入日期字段在某些oracle环境中工作(我们有多种开发环境),但在某些环境中失败。

  • 问题内容: 我正在对jdbc操作使用Spring JDBC模板。由于我使用的是BeanPropertySqlParameterSource,因此将bean的START_TIME变量分配为java.sql.date类型。在Oracle数据库中,该列被称为“ DATE”类型(并且没有TIMESTAMP类型,即使数据库为10.2 ver) 现在当我设定 它以日期和时间戳记存储为00:00:00 请告诉我

  • 问题内容: 我使用hibernate的hbm2ddl自动生成架构。这是我的域名: 当我使用hibernate保存a时,它会为ID生成ID,因此可以按预期工作。但是,当我使用jdbcTemplate通过纯SQL插入记录时,它报告一个错误: 如何解决呢? 我调试发现生成的hb2ddl的DDL是。hibernate者似乎以自己的方式处理id策略,但是如何处理呢? 本应产生的DDL的语句,但我没有发现。我

  • 我正试图将这些值插入到oracle数据库中,但我又犯了一个错误: 错误为:ORA-01843:不是有效月份 几个小时来一直试图解决这个问题,但我找不到问题!请帮忙!。 信息[http-8080-2](ecsystem.java:233)-2013-11-22 15:34:55.0\2013-11-22 15:34:55.0 希望这些信息能有所帮助!

  • 问题内容: 我有一些每月的天气数据,我想插入到Oracle数据库表中,但是我想成批插入相应的记录,以提高效率。谁能建议我如何用Python做到这一点? 例如,假设我的表有四个字段:工作站ID,日期和两个值字段。记录由工作站ID和日期字段(复合键)唯一标识。我将为每个站点插入的值将保存在一个列表中,其中包含X整整年的数据值,因此,例如,如果有两年的值,则值列表将包含24个值。 如果我想一次插入一条记