2017-07-10 2 views
0

aufrufen Ich habe eine gespeicherte Funktion, die unter Argumente in der Datenbank dauert.Wie gespeicherte Funktion in Java der PostgreSQL-Datenbank mit JDBCTemplate

CREATE OR REPLACE FUNCTION

public.abc(
    id integer, 
    title text, 
    description text, 
    valid_until_date timestamp with time zone, 
    user_is_ext boolean, 
    remarks text) 
{ 
    //statements 
} 

Ich brauche diese gespeicherte Funktion aufzurufen. Ich bin in der Lage direkt in der Datenbank unter Abfrage aufzurufen:

select "abc" (0,'title','description','2010-01-01 00:00:00+01',false,'text') 

aber ich nicht in der Lage bin mit JDBC-Vorlage in meinem SpringBoot Anwendung aufzurufen.

String sql="select \"abc\" (?,?,?,?,?,?)"; 
List<Integer> ids=jdbcTemplate.query(sql,new Object[]{id,myObj.getTitle(), myObj.getDescription(), myObj.getValidDate(), myObj.isUserExt(), ,myObj.getRemarks()},new BeanPropertyRowMapper(Integer.class)); 

Kann mir jemand helfen, herauszufinden, was ich vermisse?

Ich bekomme "Der Spaltenindex liegt außerhalb des Bereichs:" Fehler. Ich habe versucht, „update“ anstelle von „Abfrage“ mit int ind=jdbcTemplate.update(sql, id,myObj.getTitle(), myObj.getDescription(), myObj.getValidUntilDate(), myObj.isUserExt(), myObj.getRemarks());

dann bekomme ich Fehler folgende

""2017-07-10 14:51:16 [http-bio-8080-exec-60] ERROR c.s.k.l.exceptions.ExceptionHandlers --- A result was returned when none was expected. –

mit SimpleJDBC Anruf versucht, wie auf dem Kommentar erwähnt. immer unter Fehler während Zeitstempel als Parameter in SqlParameter Objekt übergeben

""2017-07-10 16:18:16 [http-bio-8080-exec-97] ERROR c.s.k.l.exceptions.ExceptionHandlers --- Bad value for type timestamp : [email protected]

+0

Was passiert, wenn Sie es so, erhalten Sie einen Fehler oder was noch? –

+0

Ich bekomme "Der Spaltenindex liegt außerhalb des Bereichs:" Fehler. Ich habe versucht, "update" anstelle von "Abfrage" 'int ind = jdbcTemplate.update (SQL verwenden, \t \t \t \t id, myObj.getTitle(), myObj.getDescription(), myObj.getValidUntilDate(), myObj.isUserExt (), myObj.getRemarks()); 'dann bekomme ich folgenden Fehler'" "2017-07-10 14:51:16 [http-bio-8080-exec-60] ERROR csklexceptions.ExceptionHandlers --- Ein Ergebnis war zurückgegeben, wenn keine erwartet wurde. – Linz

+0

Verwenden Sie 'org.springframework.jdbc.core.simple.SimpleJdbcCall' –

Antwort

0

Schließlich beschloss ich es !!

In meinem Fall versuche ich eine gespeicherte Funktion aufzurufen, die einen ganzzahligen Wert zurückgibt. bitte finden Sie das Code-Snippet unten.

String sql="select * from \"stored_function_name\" (?,?,?,?,?,?,?,?,?)";
Integer result=jdbcTemplate.queryForObject(sql,Integer.class, new Object[] {all input parameters separated by coma});

Ebenso können wir auch andere Varianten von query verwenden.

Bitte stellen Sie sicher, dass die Parameter, die Sie übergeben, den gleichen Datentyp wie in Postgres-Datenbank haben. Wenn es einen Zeitstempel in db und Sie Datum als String haben, können Sie es konvertieren unter Code

Timestamp.valueOf("date_string in yyyy-mm-dd hh:mm:ss format")

Vielen Dank an alle zeitzustempeln mit !!

Verwandte Themen