0

病历:

我已将 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 位

从旧版本中完全转储并导入新版本。

问题陈述:

当我们从新版本(企业版)访问 postgre 函数时(通过从 java 1.8 建立连接)。尽管与 postgreSQL 企业建立连接没有问题,但出现以下错误。

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 statement 是否有任何变化?尽管在与旧版本的 PostgreSQL 建立连接时,相同的过程正在工作。

请建议

BR// 莫希特 M

4

2 回答 2

0

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

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();

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

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);
   }
于 2016-12-12T08:16:54.703 回答
0

我也面临同样的问题。

我认为您正在使用 postgresql-9.4.1211.jre6.jar。问题将通过将 jar 替换为 postgresql-9.4.1209.jre6.jar 来解决。

于 2016-12-12T08:57:20.513 回答