【发布时间】:2019-04-15 10:55:35
【问题描述】:
当使用 DB2 调用 SQLException.getMessage() 时,我们看到了 RunTimeException:
Caused by: com.ibm.db2.jcc.am.ro: Q1D02E02;EXECUTE;SYSIBM.SQLCAMESSAGECCSID
at com.ibm.db2.jcc.am.ed.a(ed.java:676)
at com.ibm.db2.jcc.am.ed.a(ed.java:60)
at com.ibm.db2.jcc.am.ed.a(ed.java:127)
at com.ibm.db2.jcc.am.p.e(p.java:512)
at com.ibm.db2.jcc.am.p.a(p.java:467)
at com.ibm.db2.jcc.am.sn.a(sn.java:334)
at com.ibm.db2.jcc.am.qm.c(qm.java:78)
at com.ibm.db2.jcc.am.ro.getMessage(ro.java:52)
这可能是我的配置问题引起的,但getMessage() 肯定不应该抛出?
【问题讨论】:
-
哪个 Db2 驱动程序版本?哪个 Db2 服务器操作系统?是否设置了 jdbc 驱动程序属性“retrieveMessagesFromServerOnGetMessage”?如果已设置,并且您的 Db2 服务器在 Linux/Unix/Windows 上运行,那么它将调用存储过程,并且如果您的配置不正确,可能会引发异常,例如,如果连接的用户 ID 缺乏相关存储的执行权限程序
-
我会挖掘出细节(这不是我的系统)。但即使用户没有权限,该方法也不应该抛出,对吧?
-
您是否认真建议在这种情况下抛出 RunTimeException 是可以的?
-
如果 Db2-server 被询问 "please do x for user y" ,并且 Db2-server 未配置为允许用户 y 执行 x,则 Db2-server 似乎有效抛出异常。客户端(jdbc 驱动程序)当然可以选择它想要对该异常执行的操作,包括丢弃它……但这是 jdbc 驱动程序及其配置的问题,因此了解版本等的详细信息是必要的。 .
-
我同意。我要说的是,这显然是 JDB 驱动程序中的一个错误。是的,我会尝试获取有关具体版本的信息。