从java代码调用存储函数时的DateTime参数

时间:2010-04-15 08:36:26

标签: java oracle stored-procedures plsql

我用这样的签名调用存储函数:

  

功能添加(城市VARCHAR2,   startDate DATE,numDays INTEGER)

来自java代码:

        JdbcTemplate jt = getJdbcTemplate();
        Object o = jt.execute("{? = call ADDDAYS(?, ?, ?)}", new CallableStatementCallback() {
            public Object doInCallableStatement(CallableStatement stmt) throws SQLException, DataAccessException {
                 stmt.registerOutParameter(1, Types.DATE);
                stmt.setString(2, city);
                stmt.setDate(3, new java.sql.Date(startDate.getTime()));
                stmt.setInt(4, daysNum);
                stmt.execute();
                return new Date(stmt.getDate(1).getTime());
            }

        });

当我传递startDate时,返回值包含00:00作为时间(存储过程没有削减时间部分,我通过sql编辑器的直接调用检查它)。 所以看起来时间部分在发送到/接收表单Oracle时被删除。 有可能解决它吗? 感谢。

1 个答案:

答案 0 :(得分:3)

java.sql.Date仅用于存储没有时间信息的日期。 您应该使用java.sql.TimestampsetTimestampgetTimestamp来处理日期和时间时间信息。 如果您只需要时间信息,请同时查看java.sql.Timeset/getTime