案例历史记录:
我已将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
答案 0 :(得分: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);
}
现在对于企业版我使用以下代码
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将解决问题。