Я использую официальный драйвер Sybase JDBC для подключения к базе данных и вызова хранимой процедуры, создав CallableStatement, привязав к ней параметры и вызвав для нее функцию .execute ().
Однако я обнаружил, что исключение не выдается, даже если хранимая процедура завершается ошибкой. Я могу убедиться, что ошибка передается обратно мне, прослушивая трафик к базе данных с помощью Wireshark и наблюдая за сообщениями об ошибках, возвращающимися.
Наконец, я обнаружил, что использование .executeUpdate () вместо .execute () дает исключения, но у меня все еще осталось два вопроса:
- Почему .execute () и .executeUpdate () ведут себя по-разному? Из документации SUN интерфейса видно, что они должны делать (почти) одно и то же ...
- Всегда ли уместно заменять .execute () на .executeUpdate () при вызове хранимой процедуры? Должна ли хранимая процедура соответствовать некоторым конкретным требованиям, чтобы ее можно было вызывать с помощью .executeUpdate ()? (например, должен ли он иметь оператор update / delete / insert в качестве последнего шага?)
Обновление : я пробовал jTDS, и он ведет себя правильно (как в: он выдает исключение SQLEx в обоих случаях - с .execute () и с .executeUpdate ()). Однако из-за не зависящих от меня ограничений отключение драйвера на самом деле невозможно.
Также: меня не интересует результат, возвращаемый этой хранимой процедурой, это процедура типа вставки / обновления. Я только вставил бы, чтобы видеть (и быть в состоянии поймать / войти), если это терпит неудачу или нет. Еще одна вещь, которую я пробовал, - получать предупреждения от соединения после .execute (), но он тоже ничего не содержал.