java - 调用 SQLException.getMessage() 时出现 RuntimeException (DB2)

标签 java jdbc db2 db2-luw

使用 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 JDBC 驱动程序属性 retrieveMessagesFromServerOnGetMessage设置为 true(非默认值)时,驱动程序将尝试通过调用存储过程 SYSIBM.SQLCAMESSAGE 从服务器检索完整的错误消息SYSIBM.SQLCAMESSAGECCSID

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

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

关于java - 调用 SQLException.getMessage() 时出现 RuntimeException (DB2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55687661/

相关文章:

java - 在 JavaFX 的节点的子列表中查找特定节点

java - 创建 Java 代理与调用 Notes API - Louts Notes

java - 根据其他文本字段的输入填充文本字段初始值

mysql - 尝试使用 jdbc 读入数据库时​​出现 Google Apps 脚本错误

java - 在准备好的语句中批量运行多个查询

linux - Linux 上的 DB2 Express

java - 出数位数的平方到89

java - 三张表,两个外键和一名困惑的程序员

mysql - Java Spring应用程序中从Oracle迁移到MySQL : Connection Pooling

DB2 将长值转换为时间戳