2012-05-19 91 views
4

我有通用的jdbc代码,适用于各种数据库。 我有一些apis可以处理事务和保存点。Jdbc检查功能 - 保存点发布

的问题是,一些数据库需要你释放保存点手动

conn.releaseSavepoint(savepoint1) 

有的只是抛出一个exeption当你做一个手动释放(最显着的Oracle)。

如何在运行时检查数据库是否具有自动保存点发布或者是否需要手动执行 。请问,我有一些不错的apis。我不想抓住这个例外,这很丑陋 并且在这种情况下容易出错。抛出的异常是java.sql.SqlException,不像“FeatureUnsupportedException”。所以,如果有一个真正的错误,我愚蠢地捕捉到它,那么我可能会在整个交易中完全失败。

感谢

+1

你已经说过你不想听到这个,但我认为捕捉异常是你最好的选择 – ControlAltDel

+0

Javadoc说如果不支持,它会抛出SQLFeatureNotSupportedException。现在,如果实现符合API,那是另一回事。 – Luciano

+0

@Luciano你是对的! Oracle决定在SqlException中包装所有的db异常。但如果我抓住它,请检查“原因”字段。如果它的SQLFeatureNotSupportedException工作,否则将它扔回去!谢谢,你迄今为止给了我最好的想法。 –

回答

3

In Oracle's 10g documentation,我发现一个事实,即这种特殊的JDBC/ojdbc方法不支持:

注: 作为Oracle数据库10g,和了releaseSavepoint oracleReleaseSavepoint不被支持。如果调用其中任何一种方法,则会抛出SQLException,并显示消息“不支持的功能”。

在11g,the documentation seems to claim否则:

你删除使用Connection.releaseSavepoint(保存点svpt)方法的保存点。

但我可以很容易地在11g中重现您的问题。