如何从DB2获取描述性错误消息?

时间:2010-04-27 09:41:25

标签: java jdbc db2

当我在DB2上通过JDBC调用SQL语句并且语句失败时,我会捕获带有以下消息文本的SQLException:

com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703,
    SQLERRMC=O.METADATENSATZ, DRIVER=3.52.95

我尝试根据error list published by IBM自动翻译邮件,但邮件中的占位符引用了异常的其他元素。

在异常中查找这些元素时,我找到DB2ExceptionFormatter并尝试使用它来访问缺少的元素。

但在这里我停了下来,因为DB2ExceptionFormatter给了我一个线索:

  

尝试从服务器获取消息文本时出错。只有消息令牌可用。

所以我的问题是:我需要配置什么来从DB2服务器获取正确的消息?

如果我可以从服务器获取人类可读的消息,我可以直接使用它,而不必自己翻译。

2 个答案:

答案 0 :(得分:6)

我不确定你在上面看到的是什么消息引用(它似乎是iSeries?)但你最好通过here转到DB2 Message Reference。

查找SQL0206会获得this page,其中包含以下信息:

  

名称在使用它的上下文中无效。

SQLERRMC是“O.METADATENSATZ”所以我认为这意味着你已经向DB2发送了一个SQL语句,它报告说“O.METADATENSATZ”无效......该列不存在或者表“O”不存在。

message reference所述,如果要自动转换DB2错误消息:

  

要调用消息帮助,请打开命令行处理器并输入:

     

? XXXnnnnn

     

其中XXX表示有效的邮件前缀,nnnnn表示有效的邮件编号。

     

可以通过发出以下命令来检索与给定SQLSTATE值关联的消息文本:

     

? NNNNN

     

     

? NN

     

其中nnnnn是五位数的SQLSTATE(字母数字),nn是两位数的SQLSTATE类代码(SQLSTATE值的前两位)。

在您的情况下,在DB2 CLP中键入“?SQL0206”会收到错误消息。

答案 1 :(得分:3)

我找到了提示here

  

<强> retrieveMessagesFromServerOnGetMessage:

     

指定JDBC SQLException.getMessage调用是否导致IBM DB2 Driver for JDBC和SQLJ调用DB2 for z / OS存储过程,该存储过程检索错误的消息文本。此属性的数据类型是boolean。默认值为false,这意味着不会将完整的消息文本返回给客户端。


我试过了,但sqlException.getMessage()的输出只更改为

O.METADATENSATZ

没有任何周围的消息文本。


现在我找到了this

  

在DB2®forz /OS®子系统上使用IBM®DataServer Driver for JDBC和SQLJ的某些功能之前,需要安装一组存储过程并创建一组表。

...

  

必须在z / OS系统上安装WLM。

WLM是我用于开发的DB2 Express版本不可用的DB2 Workload Manager: - (