我用这样的签名调用存储函数:
功能添加(城市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时被删除。 有可能解决它吗? 感谢。
答案 0 :(得分:3)
java.sql.Date
仅用于存储没有时间信息的日期。
您应该使用java.sql.Timestamp
,setTimestamp
和getTimestamp
来处理日期和时间时间信息。
如果您只需要时间信息,请同时查看java.sql.Time
和set/getTime
。