外部コマンドを実行するJavaプロセスを使用しました。このコマンドは、いくつかの db2 コマンドを含む .bat ファイルです。プロセス waiffor() を使用して結果を返したい場合、何も取得できません。プログラムはブロックでなければなりません。
ジャバコード:
.....
Runtime rt = Runtime.getRuntime();
Process p = null;
String command = "db2cmd -c -w -i C:/import1.bat";
p = rt.exec(command);
p.waitFor();
.....
import1.bat:
@echo off
db2 connect to text_DB user text using tesxt0114
db2 IMPORT FROM "C:\MVCMSInputFiles\IIS20121224180129.csv" OF DEL METHOD P (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) MESSAGES "C:\MVCMSInputFiles\20121224180129.log" INSERT INTO BLUEX.BIZ_MACHINE (MACHINE_SSERIALNO, MACHINE_STYPE, MACHINE_SPROJECTID, MACHINE_SCATEGORY, MACHINE_SNAME, MACHINE_SBRAND, MACHINE_SSPOT, MACHINE_SPRODUCEDATE, MACHINE_SSERVPERIOD, MACHINE_SENDDATE, MACHINE_SCONTRACTID, MACHINE_SSERVSTATUS, MACHINE_NSTATUS, MACHINE_SSCID, LOG_SLASTUSER, MACHINE_TSIMPORTTIME)
db2 connect reset
私も
p.getInputStream()
処理InputStream
に使っていますが、3番目のコマンドで必ず処理がブロックされます。(db2 import.....)
ジャバコード:
Runtime rt = Runtime.getRuntime();
Process p = null;
String command = "db2cmd -c -w -i C:/import1.bat";
p = rt.exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = reader.readLine())!= null){
System.out.println(line);
}
reader.close();
while(true){
if (p.waitFor() == 0) break;
}
3番目のコマンドを使用db2 export...
またはdb2 select * from ....
置換したとき。関数waitfor
は結果を返すことができます。プロセスをブロックすることはできません。
それは奇妙すぎる。