2016-04-28 18 views
1

应用程序输出工作正常,在Windows机器上,其中DB2是安装在英语,因为需要验证的执行命令的输出像验证DB2命令的Japenese /中国机床

> db2 attach to DB2 user db2admin using xxxxxx 

Instance Attachment Information 

Instance server  = DB2/NT64 10.5.1 
Authorization ID  = DB2ADMIN 
Local instance alias = DB2 

其实上面的输出重定向到一个文本文件,然后验证由Java代码

String message = Utils.readFile(filePath); 
message = message.trim().replaceAll("\\s+", " "); 
String upperStr = message.toUpperCase(); 

if (upperStr.indexOf("INSTANCE ATTACHMENT INFORMATION") != -1 
     && upperStr.indexOf("AUTHORIZATION ID") != -1) 
    return "SUCCESS"; 
else 
    return "FAILURE"; 

但问题是:在日本/中国机床的DB2命令生成自己的语言,如输出在日本机器

インスタンス?Eアタッチ?﨣・インスタンス?Eサ?[バ?[ = DB2/NT 10.5.5 許可 ID = DB2ADMIN ・?[カル?Eインスタンス別名 = DB2 

那么,如何修改该语言以正常工作,如英语? 或者命令的输出是否只能以英文生成?

+1

为什么不简单地检查CLP返回码的错误值(即4)?否则,您需要更改客户端OS语言设置(样品区域设置控制面板或LANG设置) – mustaccio

+0

但是,当ATTACH命令成功运行时,它不会返回包含0(对于SUCCESS)的消息,因此如何处理这种方式? – Kishore

+1

任何操作系统命令(包括DB2 CLP)_always_都有一个退出代码,对于一个成功的完成它是0,它不是_message_。 – mustaccio

回答

1

看来您选择了一种不可靠的方式来确定外部程序的成功(或失败)。除了你正在处理的语言问题之外,还有其他可能的问题来尝试保存和解析程序输出。

检查外部程序结果的更好方法是查看其退出代码。按照惯例,大多数程序(包括DB2 CLP)在成功结束时返回0,如果存在某种问题,则返回不同的值。你可以找到more information in the manual

从Java执行外部程序时,可以使用Process.exitValue()来获取其退出代码。

+0

我试图让** Process.exitValue()** 通过在_ATTACH_命令中提供不正确的用户名和密码 ** db2附加到DB2用户db2admin2使用xxxxxx ** 但仍然获得** ZERO = 0 **作为返回值。 那么在那种情况下如何依靠** returnCode ** ?? – Kishore

+0

调试没有看到的代码真的很难,你知道吗?考虑使用'public Process exec(String [] cmdarray)'版本。 – mustaccio