我对 Sybase JDBC 驱动程序如何处理带有混合参数IN
和OUT
参数的存储过程感到疯狂。看看这个简单的存储过程:
CREATE OR REPLACE PROCEDURE p (IN i1 INT, OUT o1 INT, IN i2 INT, OUT o2 INT)
BEGIN
set o1 = i1;
set o2 = i2;
END
这就是我用 JDBC 来称呼它的方式:
CallableStatement c = connection.prepareCall("{ call dba.p(?, ?, ?, ?) }");
c.setInt(1, 1);
c.setInt(3, 2);
c.registerOutParameter(2, Types.INTEGER);
c.registerOutParameter(4, Types.INTEGER);
c.execute();
System.out.println(c.getObject(2));
System.out.println(c.getObject(4));
但这导致
1
null
这是怎么回事??这是 JDBC 驱动程序中的一个非常邪恶的错误,还是我完全遗漏了什么?通过反复试验,我发现这是一种工作方式:
c.setInt(1, 1);
c.setInt(2, 2);
c.registerOutParameter(3, Types.INTEGER);
c.registerOutParameter(4, Types.INTEGER);
c.execute();
System.out.println(c.getObject(3));
System.out.println(c.getObject(4));
现在结果是
1
2
JDBC驱动是不是偷偷重新排序IN
和OUT
参数??
我正在使用 SQL Anywhere 12 和 jconn3.jar