Jdbc 检查功能 - 保存点发布

Mat*_*dan 6 java database oracle jdbc savepoints

我有适用于各种数据库的通用 jdbc 代码。我有一些处理事务和保存点的 api。

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

 conn.releaseSavepoint(savepoint1) 
Run Code Online (Sandbox Code Playgroud)

有些只是在您进行手动发布时抛出一个例外(最显着的是 Oracle)。

如何在运行时检查数据库是否具有自动保存点释放或是否需要手动执行。还有,我有一些不错的 api。我不想捕获异常,在这种情况下它很丑陋且容易出错。抛出的异常是java.sql.SqlException,而不是“FeatureUnsupportedException”之类的东西。因此,如果存在真正的错误并且我愚蠢地抓住了它,那么我可能会在整个交易过程中完全失败。

谢谢

Luk*_*der 5

在 Oracle 的 10g 文档中,我可以发现不支持此特定 JDBC / ojdbc 方法的事实:

注意:从 Oracle 数据库 10g 开始,不支持 releaseSavepoint 和 oracleReleaseSavepoint。如果调用任一方法,则会抛出 SQLException 并显示消息“不支持的功能”。

在 11g 中,文档似乎另有说法

您可以使用 Connection.releaseSavepoint(Savepoint svpt) 方法删除保存点。

但是我也可以在 11g 中轻松重现您的问题。