2012-05-19 130 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中重現您的問題。