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