6

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

问题是某些数据库要求您手动释放保存点

 conn.releaseSavepoint(savepoint1) 

有些只是在您进行手动发布时抛出异常(最值得注意的是 Oracle)。

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

谢谢

4

2 回答 2

5

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

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

在 11g 中,文档似乎另有声明:

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

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

于 2014-08-12T09:43:57.553 回答
0

如果您可以将数据库供应商参数传递到您的类中,那么您可以简单地为每个供应商映射此行为。

于 2020-10-28T09:59:29.677 回答