2010-04-15 92 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