2016-09-23 37 views
0

我正在嘗試使用Callable Statement調用Java中的Postgres函數。該函數的輸入參數之一是Timestamp類型。當我嘗試從java調用函數時,出現以下錯誤。在jdbc調用中出現「未知數據類型」錯誤

ERROR: function insrt_data(character varying, integer, bigint, unknown, character varying) does not exist 

我的函數簽名是:

insrt_data(
i_cd character varying, 
i_prog_id smallint, 
i_stat_id bigint, 
i_dt date, 
i_stat_cd character varying) RETURNS character varying 

我的JDBC調用如下所示。 StrtDt是一個java.util.Date字段。

String sql = "{call mySchema.insrt_data(?, ?, ?, ?, ?)}";  
java.sql.Date StartDt = new java.sql.Date(record.getStrtDt().getTime()); 
Map<String, Object> map = jdbcTemplate.call(connection -> { 
      CallableStatement statement = connection.prepareCall(sql); 
      statement.setString(1, record.getCd()); 
      statement.setInt(2, record.getProgId()); 
      statement.setLong(3, record.getId()); 
      statement.setDate(4, StartDt); 
      statement.setString(5, record.getStatCd()); 
      statement.registerOutParameter(1, Types.VARCHAR); 
      return statement; 
     }, paramList); 

回答

0

問題出在i_prog_cd。當我通過int時,函數預計值爲smallint。 Postgres的smallint對應於java中的short。將代碼更改爲short後,代碼生效!