2010-04-15 94 views
1

我把这样的签名存储功能:日期时间参数

功能ADDDAYS(市VARCHAR2, 的startDate DATE,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作为时间(存储过程不削减时间部分,我检查它w直接从sql编辑器调用)。 所以看起来像时间部分在发送到/接收表格Oracle中被删除。 是否可以修复它? 谢谢。

+0

我希望你意识到'ADDDAYS'函数正在重新发明车轮;在Oracle'DATE'或'TIMESTAMP'中添加一个数字可以将该天数(或其部分)添加到它。 – 2010-04-15 19:57:51

+0

这不仅仅是将N天添加到指定的日期,它将针对不同的城市使用工作日日历。如果我只需要将N天添加到当前日期,为什么我需要将城市参数传递给此函数。 – dbf 2010-04-16 09:13:08

回答

3

java.sql.Date仅用于存储没有时间信息的日期。 您应该使用java.sql.Timestamp,setTimestampgetTimestamp来处理日期&时间信息。 如果您只需要时间信息,请参阅java.sql.Timeset/getTime

+0

很酷,谢谢! – dbf 2010-04-15 09:00:02