2010-04-27 66 views
6

当我在DB2通过JDBC调用SQL语句,该语句失败,我赶上一个SQLException以下消息文本:如何从DB2获取描述性错误消息?

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

为了回答这个问题,了解您正在使用的DB2版本和系统(LUW,z/OS,AS400等)会有帮助。 – 2015-12-30 08:37:00

回答

6

我不知道你在看什么上述消息引用的DB2 Express版本(好像是i系列),但你最好在here访问DB2消息参考

仰望SQL0206得到我们this page,并提供以下信息:?

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

的则sqlerrmc是“O.METADATENSATZ”所以我会认为这意味着您已发送SQL语句到DB2,并报道说“O.METADATENSATZ”是无效的......无论是列没有按” t存在或者表“O”不存在。

随着message reference状态,如果你想自动翻译DB2错误消息:

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

? XXXnnnnn

其中XXX代表有效的消息前缀,nnnnn代表有效的消息号码。

与给定值SQLSTATE相关联的消息文本可以通过发出检索? NNNNN

? nn

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

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

+0

+1指向我更好的SQLSTATE列表。 – tangens 2010-04-28 07:29:19

3

我发现了一个暗示here

retrieveMessagesFromServerOnGetMessage:

JDBC调用SQLException.getMessage指定是否导致JDBC和SQLJ的IBM DB2驱动程序调用针对z/OS存储过程DB2它检索错误的消息文本。该属性的数据类型是布尔值。缺省值为false,这意味着完整的消息文本不会返回给客户端。


我尝试这样做,但sqlException.getMessage()输出仅变为

O.METADATENSATZ 

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


现在我发现this

之前,你可以针对z /OS®子系统DB2®使用IBM数据服务器驱动程序JDBC和SQLJ的某些功能,您需要安装一组存储过程并创建一组表。

...必须在z/OS系统上安装

WLM。

WLM是DB2 Workload Manager是不适用于我使用发展:-(