Параметры Sybase IN и OUT

Я схожу с ума по поводу того, как драйвер 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

What ' происходит ?? Это действительно ужасная ошибка в драйвере 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

5
задан Danny Beckett 14 March 2013 в 07:34
поделиться