Re: prepared statement call fails - Mailing list pgsql-jdbc
From | Larry White |
---|---|
Subject | Re: prepared statement call fails |
Date | |
Msg-id | d15ea14a04120511366efd4b9c@mail.gmail.com Whole thread Raw |
In response to | Re: prepared statement call fails (Thomas Hallgren <thhal@mailblocks.com>) |
Responses |
Re: prepared statement call fails
|
List | pgsql-jdbc |
Thanks Thomas. I'll try it your way to see what happens, but according to the Postgresql documentation, it should support callable statements. I posted the relevent text from the JDBC section of the online docs below: <quote> PostgreSQL's JDBC driver fully supports calling PostgreSQL stored functions. Example 31-4. Calling a built in stored function This example shows how to call a PostgreSQL built in function, upper, which simply converts the supplied string argument to uppercase. // Turn transactions off. con.setAutoCommit(false); // Procedure call. CallableStatement upperProc = con.prepareCall("{ ? = call upper( ? ) }"); upperProc.registerOutParameter(1, Types.VARCHAR); upperProc.setString(2, "lowercase to uppercase"); upperProc.execute(); String upperCased = upperProc.getString(1); upperProc.close(); <end quote> On Sun, 05 Dec 2004 20:08:54 +0100, Thomas Hallgren <thhal@mailblocks.com> wrote: > Larry White wrote: > > > > I'm hoping someone with more experience can help me find a problem in > > calling a function from Java. This is the first time I'm trying this > > so I'm guessing it will be straightforward. > > > > The function's signature is: > > > > add_country(bigint, char(2), char(3), varchar(60)) > > RETURNS INTEGER ' > > > > It works fine if I call it from the command line, like so... > > > > select add_country(124,'US', 'USA', 'United States of America'); > > > > In java, I call it using the following: > > > > CallableStatement proc = null; > > proc = connection.prepareCall("{ ? = call add_country( ? ? ? ? ) }"); > > proc.registerOutParameter(1, java.sql.Types.INTEGER); > > proc.setInt(2, 124); > > proc.setString(3, code2); // a two character java String > > proc.setString(4, code3); // a three character java String > > proc.setString(5, name); // a Java String > > proc.execute(); > > > AFAIK, CallableStatement is for stored procedure calls. Stored > procedures are not yet implemented in PostgreSQL. It only has functions. > In order to call a function you need a select statement and a normal > PreparedStatement. Try this: > > PreparedStatement stmt = connection.prepareStatement("select > add_country(?,?,?,?)"); > stmt.setInt(1, 124); > stmt.setString(2, code2); > stmt.setString(3, code3); > stmt.setString(4, code4); > ResultSet rs = stmt.executeQuery(); > if(rs.next()) > result = rs.getInt(1); > > Kind regards, > Thomas Hallgren > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) >
pgsql-jdbc by date: