Java DB29抛出InvalidDataAccessResourceUsageException而不是PermissionDeniedDataAccessException

Java DB29抛出InvalidDataAccessResourceUsageException而不是PermissionDeniedDataAccessException,java,spring,db2,Java,Spring,Db2,我有一个Java应用程序,它可以查询当前用户帐户可能有权或没有权访问的数据库表。如果返回异常,我想区分AccessDenied和关闭/脱机的数据库服务器。我预计,当用户对表没有select权限时,db2会抛出PermissionDeniedDataAccessException。然而,当我测试它时,db2抛出了一个InvalidDataAccessResourceUsageException 捕获InvalidDataAccessResourceUsageException并将其作为Access

我有一个Java应用程序,它可以查询当前用户帐户可能有权或没有权访问的数据库表。如果返回异常,我想区分AccessDenied和关闭/脱机的数据库服务器。我预计,当用户对表没有select权限时,db2会抛出PermissionDeniedDataAccessException。然而,当我测试它时,db2抛出了一个InvalidDataAccessResourceUsageException

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


仅供参考:我使用的是用于db2的JDBC驱动程序,而不是ODBC驱动程序,因此我希望得到更好的Java支持。

有趣的是,您已经用“spring”标记了这个问题,尽管您不再提及它。
您应该考虑使用Spring访问DB。因此,抛出的所有异常都将转换为通用的Spring异常,您不必担心特定的DBMS异常。它将把任何异常转换为DataAccessException的(子类)。还有PermissionDeniedDataAccessException,如果用户没有权限,可能会发生这种情况。

如果Spring异常转换算法错误地将SQL异常代码映射到Spring的异常,您可以自己确定SQL代码并自定义异常转换,如下所述:

实际上,我已经在使用Spring与ibatis的集成,但它似乎没有正确处理这个问题。这就是我希望收到PermissionDeniedDataAccessException而不是InvalidDataAccessResourceUsageException(从DataAccessException继承而来)的原因。实际上,我不知道我可以在春季制作自己的异常捕捉器。这将允许我通过捕获特定的sqlcodes来完成。