我有一个Java应用程序,用于查询当前用户帐户可能访问或不访问的数据库表。如果返回异常,我想区分AccessDenied和数据库服务器正在关闭/脱机。我预计当用户没有对表的select权限时,db2会抛出PermissionDeniedDataAccessException。但是,当我测试它时,db2抛出了InvalidDataAccessResourceUsageException。
捕获InvalidDataAccessResourceUsageException并将其作为AccessDenied异常处理是否安全?为什么db2不抛出PermissionDeniedDataAccessException?
仅供参考:我正在使用db2的JDBC驱动程序,而不是ODBC驱动程序,所以我期望更好的Java支持。
答案 0 :(得分:0)
有趣的是,你已经用'spring'标记了这个问题,尽管你没有进一步提及它。 您应该考虑使用Spring JdbcTemplate来访问数据库。因此,抛出的所有异常都将转换为通用Spring异常,您无需关心特定的DBMS异常。它会将任何异常转换为(DataAccessException的子类)。还有PermissionDeniedDataAccessException,如果用户没有权限,可能会发生。
答案 1 :(得分:0)
如果Spring异常转换算法错误地将SQL异常代码映射到Spring的异常,您可以自己确定SQL代码并自定义异常转换,如下所述:12.2.4 SQLExceptionTranslator