从java代码调用存储函数时的DateTime参数
我使用以下签名调用存储函数: 功能添加日(城市VARCHAR2, 起始日期,numDays整数) 来自java代码:从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
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天添加到当前日期,为什么我要将城市参数传递到此函数。