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

时间:2016-12-07 08:46:47

标签: java postgresql enterprisedb

案例历史记录:

我已将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企业建​​立连接没有问题,但要低于错误。

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

2 个答案:

答案 0 :(得分:0)

对我而言CallableStatement代替PreparedStatementCallableStatement起作用。 我之前使用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);
   }

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

db.myprofile.aggregate([
    {
      $lookup:
        {
          from: "user",
          localField: "old_user_id",
          foreignField: "old_user_id",
          as: "inventory_docs"
        }
   },
   { $project : { _id : "$inventory_docs._id",
                  old_user_id:"$old_user_id",
                 "name":"$name",
                 "number":"$number" } },
   {$unwind: "$_id"}
])

答案 1 :(得分:0)

我也面临同样的问题。

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