java调用postgreSQL企业版函数时CallableStatement失败
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 enterprise 建立连接没有问题,但出现以下错误。
org.postgresql.util.PSQLException: A CallableStatement was executed with an invalid number of parameters
at org.postgresql.jdbc.PgCallableStatement.executeWithFlags(PgCallableStatement.java:106)
所有 144 个函数都会出现此错误。 java callableStatement 和 prepared statement 在使用 enterprise PostgreSQL 时有什么变化吗?尽管在与旧版本的 PostgreSQL 建立连接时,相同的程序仍在运行。
请推荐
BR// 莫希特 M
对我来说 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);
}
我也遇到了同样的问题
我认为您使用的是 postgresql-9.4.1211.jre6.jar。问题将通过将 jar 替换为 postgresql-9.4.1209.jre6.jar 来解决。
病历:
我已经将 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 enterprise 建立连接没有问题,但出现以下错误。
org.postgresql.util.PSQLException: A CallableStatement was executed with an invalid number of parameters
at org.postgresql.jdbc.PgCallableStatement.executeWithFlags(PgCallableStatement.java:106)
所有 144 个函数都会出现此错误。 java callableStatement 和 prepared statement 在使用 enterprise PostgreSQL 时有什么变化吗?尽管在与旧版本的 PostgreSQL 建立连接时,相同的程序仍在运行。
请推荐
BR// 莫希特 M
对我来说 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);
}
我也遇到了同样的问题
我认为您使用的是 postgresql-9.4.1211.jre6.jar。问题将通过将 jar 替换为 postgresql-9.4.1209.jre6.jar 来解决。