java CallableStatement失败,同时调用postgreSQL企业版的功能

java CallableStatement failed, while calling function of postgreSQL enterprise edition

病历:

我已将postgreSQL正常升级到企业版

旧版:
x86_64-pc-linux-gnu上的PostgreSQL 9.5.5,由gcc(GCC)4.1.2 20080704(Red Hat 4.1.2-55)编译,64位

新版本:
x86_64-pc-linux-gnu上的EnterpriseDB 9.5.0.5,由gcc(GCC)4.1.2 20080704(Red Hat 4.1.2-55)编译,64位

从旧版本获取完整转储并在新版本中导入。

问题陈述:

我们正在从新版本(Enterprise)访问postgre函数(通过从Java 1.8建立连接)。 尽管与postgreSQL企业建立连接没有问题,但要低于错误。

1
2
org.postgresql.util.PSQLException: A CallableStatement was executed with an invalid number of parameters
        at org.postgresql.jdbc.PgCallableStatement.executeWithFlags(PgCallableStatement.java:106)

所有144个功能都会出现此错误。 使用企业PostgreSQL时java callableStatement和prepared语句有什么变化吗? 虽然与旧版本的PostgreSQL建立连接时,相同的过程正在运行。

请建议

BR // Mohit M


我也面临同样的问题。

我认为你使用的是postgresql-9.4.1211.jre6.jar。 将jar替换为postgresql-9.4.1209.jre6.jar将解决问题。


对我来说,而不是CallableStatementPreparedStatement工作。
我以前使用CallableStatement使用以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CallableStatement objCallableStatement = null;
objCallableStatement = connection.prepareCall("{call alad_balad(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");

objCallableStatement.setLong(1, 431);
objCallableStatement.setString(2,"12434");
objCallableStatement.setString(3,"1234");
objCallableStatement.setString(4,"en");
objCallableStatement.setString(5, null);
objCallableStatement.setString(6, null);
objCallableStatement.setShort(7, Short.parseShort("0"));
objCallableStatement.setString(8, null);
objCallableStatement.setLong(9, 1);
objCallableStatement.setString(10,"1234");
objCallableStatement.registerOutParameter(11, java.sql.Types.VARCHAR);
objCallableStatement.registerOutParameter(12, java.sql.Types.VARCHAR);
objCallableStatement.registerOutParameter(13, java.sql.Types.VARCHAR);
objCallableStatement.registerOutParameter(14, java.sql.Types.BIGINT);
objCallableStatement.registerOutParameter(15, java.sql.Types.OTHER);
objCallableStatement.registerOutParameter(16, java.sql.Types.OTHER);
objCallableStatement.execute();

现在对于企业版我使用以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PreparedStatement objPreparedStatement = null;
try{
objConnection = objConnectionDataSource.getConnection();
objPreparedStatement = objConnection.prepareCall("{call alad_balad(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");

objPreparedStatement.setLong(1, 431);
objPreparedStatement.setString(2,"12434");
objPreparedStatement.setString(3,"1234");
objPreparedStatement.setString(4,"en");
objPreparedStatement.setString(5, null);
objPreparedStatement.setString(6, null);
objPreparedStatement.setShort(7, Short.parseShort("0"));
objPreparedStatement.setString(8, null);
objPreparedStatement.setLong(9, 1);
objPreparedStatement.setString(10,"1234");

objPreparedStatement.execute();
   ResultSet res = objPreparedStatement.getResultSet();
   String in = null;
   while ( res.next() ){
     in = res.getString(1);
     System.out.println(in);
   }