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

从java代码调用存储函数时的DateTime参数,java,oracle,stored-procedures,plsql,Java,Oracle,Stored Procedures,Plsql,我使用以下签名调用存储函数: 功能添加日(城市VARCHAR2, 起始日期,numDays整数) 来自java代码: JdbcTemplate jt = getJdbcTemplate(); Object o = jt.execute("{? = call ADDDAYS(?, ?, ?)}", new CallableStatementCallback() { public Object doInCallableStatement(Cal

我使用以下签名调用存储函数:

功能添加日(城市VARCHAR2, 起始日期,numDays整数)

来自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时,时间返回值contais 00:00作为时间(存储过程不削减时间部分,我使用来自sql编辑器的直接调用进行检查)。 因此,在发送到/接收Oracle时,似乎删除了时间部分。 有可能把它修好吗?
谢谢。

java.sql.Date
仅用于存储日期,不包含时间信息。 您应该使用
java.sql.Timestamp
setTimestamp
getTimestamp
来处理日期和时间信息。
如果您只需要时间信息,还可以查看
java.sql.Time
set/getTime

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