2016-09-23 59 views
0

JavaでCallable Statementを使用してPostgres関数を呼び出そうとしています。関数への入力パラメータの1つは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に変更した後、コードが機能しました!

関連する問題