【发布时间】:2012-05-26 21:26:37
【问题描述】:
我有适用于各种数据库的通用 jdbc 代码。 我有一些适用于事务和保存点的 api。
问题是有些数据库需要你手动释放保存点
conn.releaseSavepoint(savepoint1)
当您手动发布时,有些只是抛出异常(最显着的是 Oracle)。
如何在运行时检查数据库是否具有自动保存点释放或者我是否需要这样做 手动。并且请,我有一些不错的 api。我不想捕捉异常,这很丑陋 在这种情况下容易出错。抛出的异常是java.sql.SqlException,而不是“FeatureUnsupportedException”。因此,如果有一个真正的错误并且我愚蠢地抓住了它,那么我可能会在整个交易过程中完全失败。
谢谢
【问题讨论】:
-
你已经说过你不想听到这个,但我认为捕捉异常是你最好的选择
-
Javadoc 说如果不支持它会抛出 SQLFeatureNotSupportedException。现在,如果实现符合 API,那就另当别论了。
-
@Luciano 你是对的! Oracle 决定将他们所有的数据库异常包装在 SqlException 中。但如果我抓住它,请检查“原因”字段。如果它是 SQLFeatureNotSupportedException 工作它,否则把它扔回去!谢谢你,你给了我迄今为止最好的主意。
-
@Luciano 遗憾的是,甚至原因也包含在 SQLException 中。现在,我将完全跳过手动发布。但我不喜欢它...
标签: java database oracle jdbc savepoints