Jdbc проверка работоспособности - выпуск точек сохранения
У меня есть общий код JDBC, который работает со всеми видами баз данных. У меня есть некоторые API, которые работают с транзакциями и точками сохранения.
Проблема заключается в том, что некоторые базы данных требуют освобождения точки сохранения вручную
conn.releaseSavepoint(savepoint1)
а некоторые просто выбрасывают исключение, когда вы делаете релиз вручную (особенно Oracle).
Как я могу проверить во время выполнения, есть ли у БД автоматическое освобождение точки сохранения или мне нужно сделать это вручную. И пожалуйста, у меня есть хороший apis. Я не хочу ловить исключение, в этом случае он уродлив и подвержен ошибкам. Исключением является java.sql.SqlException, а не что-то вроде "FeatureUnsupportedException". Так что, если есть настоящая ошибка, и я по глупости ее улавливаю, я могу вообще потерпеть неудачу во всей транзакции.
Спасибо
1 ответ
В документации Oracle 10g я мог заметить тот факт, что этот конкретный метод JDBC / ojdbc не поддерживается:
Примечание: Начиная с Oracle Database 10g, releaseSavepoint и oracleReleaseSavepoint не поддерживаются. Если вы вызываете любой из методов, то SQLException выдается с сообщением "Неподдерживаемая функция".
В 11g документация утверждает, что иначе:
Вы удаляете точку сохранения, используя метод Connection.releaseSavepoint(Savepoint svpt).
Но я могу легко воспроизвести вашу проблему также в 11g.
Если вы можете передать параметр поставщика БД в свой класс, вы можете просто сопоставить это поведение для каждого поставщика.