Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Trouble with CallableStatement

1 view
Skip to first unread message

Michael Guyver

unread,
Jul 22, 2006, 8:55:42 PM7/22/06
to
Hi there,

I'm having trouble getting a CallableStatement to work with the
following function

CREATE OR REPLACE FUNCTION pro_register_cookie_for_user(
prmUserId int8,
prmSecureGuid varchar,
OUT outUsernameHash varchar,
OUT outMaxAge float4)
AS $$
...
$$ LANGUAGE plpgsql;

The function works fine over pgAdmin, so I think the problem lies in
the Java code.

callable = conn.prepareCall("{call pro_register_cookie_for_user(?, ?, ?, ?)}");

callable.setLong(1, playerId);
callable.setString(2, secureGuid);
callable.registerOutParameter(3, Types.VARCHAR);
callable.registerOutParameter(4, Types.FLOAT);

callable.executeQuery();

String usernameHash = callable.getString(3);
float maxAgeF = callable.getFloat(4);

When running this on Java 1.5, pgsql-jdbc 8.1.404 and Postgres 8.1, I
get the following error:

A CallableStatement function was executed and the return was of type
java.sql.Types=12 however type java.sql.Types=0 was registered.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:380)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:250)

Can anyone shed some light on what I'm doing wrong?

Cheers

Michael

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majo...@postgresql.org so that your
message can get through to the mailing list cleanly

Michael Guyver

unread,
Jul 23, 2006, 7:27:27 AM7/23/06
to
Hi there,

Having followed Adam's advice and prevented the original error by
upgrading the Jar to
8.1-407, I now get a different exception. For the same function:

CREATE OR REPLACE FUNCTION pro_register_cookie_for_user(
prmUserId int8,
prmSecureGuid varchar,
OUT outUsernameHash varchar,
OUT outMaxAge float4)
AS $$
...
$$ LANGUAGE plpgsql;

I now get the following error:

org.postgresql.util.PSQLException: No results were returned by the query.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:259)

This is caused by the AbstractJdbc2Statement.executeWithFlags(int)
method returning false for any code path which satisfies the condition
(isFunction && returnTypeSet).

This appears to be at best mis-reported as I can clearly see the
results being read into the abstractJdbc2Statement.callResult
instance variable.

Is this right?

Michael

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Michael Guyver

unread,
Jul 23, 2006, 8:04:43 AM7/23/06
to
On 23/07/06, Michael Guyver <ken...@googlemail.com> wrote:
> This is caused by the AbstractJdbc2Statement.executeWithFlags(int)
> method returning false for any code path which satisfies the condition
> (isFunction && returnTypeSet).
>
> This appears to be at best mis-reported as I can clearly see the
> results being read into the abstractJdbc2Statement.callResult
> instance variable.
>
> Is this right?

Gents,

My apologies, this one is my fault. In attempting to circumvent the
original problem I was experimenting with different ways of calling
the procedure, and had left my own code as running
statement.executeQuery() instead of statement.execute().

Michael

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq

0 new messages