IN
Sybase JDBC ドライバーがと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 を使用しています