Re: CallableStatement PostgreSQL Error:A CallableStatement was executed with an invalid number of parameters

From: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
To: JavaNoobie <vivek(dot)mv(at)enzentech(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: CallableStatement PostgreSQL Error:A CallableStatement was executed with an invalid number of parameters
Date: 2011-11-24 19:40:30
Message-ID: 4ECE9DAE.9050301@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

On 24.11.2011 06:13, JavaNoobie wrote:
> Im trying to write sample stored functions in postgresql and call them using
> the CallableStatement offered by JDBC.
>
> Here's some my test code
> [code=java]
> Consumer bean =new Consumer();
> CallableStatement pstmt = null;
> try {
> con.setAutoCommit(false);
> String query = "{ ? = call getData( ? ) }";
> pstmt = con.prepareCall(query);
> pstmt.registerOutParameter(1, Types.OTHER);
> pstmt.setInt(2,5);
> pstmt.execute(); // execute update statement
> bean=(Consumer)pstmt.getObject(1);
> System.out.println("bean"+bean.getConsumer_name());
> .....
> [/code]
> And my Stored function is of the form .
> [code=sql]
> CREATE FUNCTION getData(int) RETURNS SETOF db_consumer AS $$
> SELECT * FROM db_consumer WHERE consumer_id = $1;
> $$ LANGUAGE SQL;
> [/code]
>
> However, I'm getting the following error when I try to run the code .
>
> [code=java]
> org.postgresql.util.PSQLException: A CallableStatement was executed with an
> invalid number of parameters
> at
> org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:408)
> at
> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:381)
> at com.enzen.cis.dao.Updatetest.main(Updatetest.java:44)
>
> [/code]
> Any idea on why this is happening would be appreciated.

Since it's a set-returning function, I think you need to execute it like
a query, instead of using CallableStatement. Something like:

pstmt = conn.prepareStatement("SELECT getData(?)");
pstmt.setInt(1, 5);
rs = pstmt.executeQuery();

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Oliver Jowett 2011-11-25 00:20:02 Re: [JDBC] Optimize postgres protocol for fixed size arrays
Previous Message Mikko Tiihonen 2011-11-24 18:54:43 Re: [JDBC] Optimize postgres protocol for fixed size arrays