【发布时间】:2011-04-29 20:32:13
【问题描述】:
我对 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
【问题讨论】:
标签: stored-procedures jdbc sqlanywhere out-parameters jconnect