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将解决问题。
对我来说,而不是
我以前使用
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); } |