2016-09-23 1 views
0

Ich versuche, eine Postgres-Funktion in Java mit einer Callable-Anweisung aufzurufen. Einer der Eingabeparameter für die Funktion ist vom Typ Timestamp. Wenn ich versuche, die Funktion von Java aufzurufen, erhalte ich den folgenden Fehler."Unbekannter Datentyp" Fehler in JDBC Anruf

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

Meine Funktion Signatur ist:

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 

Mein jdbc Anruf als unten. StrtDt ist ein java.util.Date-Feld.

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); 

Antwort

0

Das Problem war mit der i_prog_cd. Die Funktion erwartet eine smallint als Wert, während ich eine int übergeben wurde. Postgres smallint entspricht short in Java. Nach dem Ändern in short funktionierte der Code!