使用DB2调用RunTimeException
时,我们看到一个SQLException.getMessage()
:
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 JDBC驱动程序属性retrieveMessagesFromServerOnGetMessage
设置为true
(非默认值),则驱动程序将通过调用存储过程SYSIBM.SQLCAMESSAGE
和SYSIBM.SQLCAMESSAGECCSID
尝试从服务器检索完整的错误消息。
通常,这些过程的EXECUTE
特权将被授予PUBLIC
,但是您的用户ID Q1D02E02似乎没有该特权。例如,如果数据库被创建为限制性数据库,或者特权已从PUBLIC
显式撤消,则可能会发生这种情况。
要解决此问题,请授予必要的特权或避免从数据库服务器检索错误消息。
关于java - 调用SQLException.getMessage()(DB2)时出现RuntimeException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55687661/