2010-01-14 99 views
1

我有一个Java应用程序,它查询当前用户帐户可能或不可以访问的数据库表。如果返回异常,我想区分AccessDenied和数据库服务器正在关闭/脱机。我期望当用户在表上没有选择特权时,db2会抛出PermissionDeniedDataAccessException。但是,当我测试它时,db2抛出了一个InvalidDataAccessResourceUsageException异常。Db2 9抛出InvalidDataAccessResourceUsageException而不是PermissionDeniedDataAccessException

捕获InvalidDataAccessResourceUsageException并将其作为AccessDenied异常处理是否安全?为什么db2不会抛出PermissionDeniedDataAccessException?

仅供参考:我正在使用db2的JDBC驱动程序,而不是ODBC驱动程序,所以我期望更好的Java支持。

回答

0

如果春季异常转换算法SQL异常代码错误地映射到Spring的异常,你可以自己确定SQL代码和自定义异常翻译,如下所述:12.2.4 SQLExceptionTranslator

+0

我其实并不知道我可以在Spring中创建自己的异常捕获器。这将让我通过捕获特定的sqlcodes来做到这一点。 – David 2010-01-14 17:00:58

0

有趣的是,你已经用'spring'标记了这个问题,尽管你没有再提及它。 您应该考虑使用Spring JdbcTemplate来访问数据库。因此,抛出的所有异常都将被转换为通用的Spring异常,并且您不需要关心具体的DBMS异常。它会将任何异常转换为(DataAccessException的一个子类)。还有PermissionDeniedDataAccessException,如果用户没有权限可能会发生。

+0

其实,我已经使用与ibatis的Spring集成而且似乎没有正确处理这种情况。这就是为什么我期待收到PermissionDeniedDataAccessException而不是InvalidDataAccessResourceUsageException(它从DataAccessException继承)。 – David 2010-01-14 17:00:12

相关问题