调用SQLException.getMessage()时的RuntimeException(DB2)

问题描述 投票:0回答:1

我们在用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()肯定不应该抛出?

java jdbc db2 db2-luw
1个回答
3
投票

如果Db2 JDBC驱动程序属性retrieveMessagesFromServerOnGetMessage设置为true(非默认值),则驱动程序将尝试通过调用存储过程SYSIBM.SQLCAMESSAGESYSIBM.SQLCAMESSAGECCSID从服务器检索完整的错误消息。

通常,这些过程的EXECUTE特权将被授予PUBLIC,但您的用户ID Q1D02E02似乎没有该特权。例如,如果数据库已创建为限制性,或者如果从PUBLIC明确撤销该权限,则可能发生这种情况。

要解决此问题,请授予必要的权限或避免从数据库服务器检索错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.