2016-04-28 7 views
1

アプリケーションが検証中国/ Japeneseマシン上のDB2コマンドの出力

> 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 

のような実行されたコマンドの出力を検証する必要が実際に上記の出力がリダイレクトされるので、DB2は、英語で設定されているWindowsマシン上で正常に動作します

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"; 

としてJavaコードによって検証しかし、その後、テキストファイルにし、問題がある:中国/日本のマシンでDB2コマンドは彼らの言語の例で出力を生成します日本語の機械で

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

英語のように正常に動作するようにその言語を変更するにはどうすればよいですか? コマンドの出力は英語でのみ生成できますか?

+1

エラー値(4)のCLPリターンコードを確認してみませんか?それ以外の場合は、クライアントOSの言語設定を変更する必要があります(地域設定のコントロールパネルまたはLANG設定のバイアル – mustaccio

+0

)しかし、ATTACHコマンドが正常に実行されると、0を含むメッセージは返されません。その方法は? – Kishore

+1

すべてのOSコマンド(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