在Oracle数据库中插入带有JdbcTemplate的时间戳(ORA-01858)

elc*_*dro 2 oracle timestamp date jdbc jdbctemplate

我已经阅读了很多关于这个错误的内容,但仍然没有发现错误.

我正在使用JdbcTemplate在一些带有一些时间戳列的表中插入一行我很确定时间戳是问题所在,好像从插入中删除它工作正常)

我的代码:

        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')" ;
        }
Run Code Online (Sandbox Code Playgroud)

并有下一个错误:

    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
Run Code Online (Sandbox Code Playgroud)

我试图在一些成功的SQL编辑器中执行sql,所以我不能更加困惑.

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

    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);
Run Code Online (Sandbox Code Playgroud)

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

a_h*_*ame 6

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

只需将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);
Run Code Online (Sandbox Code Playgroud)

  • 你是对的.我不相信我怎么能这样复杂自己...... (2认同)