Я использую официальный драйвер Sybase JDBC для подключения к базе данных и вызова хранимой процедуры, создав CallableStatement, привязывая к нему параметры и вызывая на нем .execute().Почему драйвер Sybase JDBC «ест» исключения?
Однако я обнаружил, что исключение не выбрасывается, даже если хранимая процедура не выполняется. Я могу проверить, что отказ распространяется на меня, обнюхивая трафик в базу данных с помощью Wireshark и наблюдая за возвратом сообщений об ошибках.
Наконец, я обнаружил, что использование .executeUpdate() вместо .Execute() ли дать мне исключения, но я до сих пор два вопроса осталось:
- Почему .Execute() и .executeUpdate() ведут себя по-другому? Из документации по интерфейсу SUN кажется, что они должны делать (почти) одно и то же ...
- Всегда ли заменять .execute() на .executeUpdate() при вызове хранимой процедуры? Должна ли хранимая процедура соответствовать определенным требованиям, подлежащим вызову с помощью .executeUpdate()? (Например, должен ли он иметь обновление/удаление вставки о/в качестве последнего шага?)
Update: Я пробовал jTDS, и он ведет себя правильно (например: он бросает SQLException в обоих case - с .execute() и с .executeUpdate()). Однако из-за ограничений, находящихся вне моего контроля, выключение драйвера на самом деле невозможно.
Также: меня не интересует результат, возвращаемый этой хранимой процедурой, это процедура типа вставки/обновления. Я бы только вставлял, чтобы видеть (и уметь ловить/лог), если он терпит неудачу или нет. Другая вещь, которую я пробовал, - это получить предупреждения от соединения после .execute(), но в нем тоже ничего не было.
Другие водители ведут себя одинаково? Что относительно jTDS? http://jtds.sourceforge.net/ –