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  (Thomas Hallgren <thhal@mailblocks.com>)
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:

Previous
From: "Chris White (cjwhite)"
Date:
Subject: Re: Use of bytea
Next
From: Thomas Hallgren
Date:
Subject: Re: prepared statement call fails