【问题标题】:DateTime parameter when calling stored function from java code从java代码调用存储函数时的DateTime参数
【发布时间】:2010-04-15 08:36:25
【问题描述】:

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

FUNCTION ADDDAYS(城市 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 中被删除了。 有可能修复它吗? 谢谢。

【问题讨论】:

  • 我希望你意识到ADDDAYS 函数正在重新发明轮子;将一个数字添加到 Oracle DATETIMESTAMP 会添加该天数(或其分数)。
  • 它不仅仅是在指定日期上添加 N 天,它使用不同城市的工作日日历。如果我只需要在当前日期加上 N 天,为什么还要将 city 参数传递给这个函数。

标签: java oracle stored-procedures plsql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2016-12-05
    • 2012-07-29
    相关资源
    最近更新 更多