当我在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服务器获取正确的消息?
如果我可以从服务器获取人类可读的消息,我可以直接使用它,而不必自己翻译。
答案 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: - (