Java呼叫db2cmd命令匯出資料

jackytang13發表於2009-06-29
轉自:[url]http://blog.csdn.net/weoln/archive/2008/02/01/2076539.aspx[/url]

使用Runtime呼叫bat檔案處理外部角本時一般使用 Runtime.getRuntime.exec(command)就可以了
如果批處理是使用db2的db2cmd時,dos視窗則會彈出db2命令視窗執行相關的處理角本,如果需要等特此批處理命令執行完成後再執行下面的流程就會出現相應的問題,如下例流程,將客戶端將生成資料備份檔案上傳至伺服器

因waitFor() 只能控制第一個dos視窗的程式,而無法控制下一個視窗,程式則會同步執行,當資料還沒生成時就已經進行壓縮處理了,當然會出現錯誤。
所以在執行批處理時將批出理檔案隱式執行

實施方法程式碼如下

/**
* 執行批處理
* @param command
*/
public void runBat(String command) {
Process child = null ;
try {
Runtime rt = Runtime.getRuntime();
child = rt.exec(command);
//以下程式碼為控制檯輸出相關的批出理
String line = null ;
BufferedReader reader = new BufferedReader(new InputStreamReader(child.getInputStream()));
while ((line = reader.readLine()) != null ) {
System.out.println(line);
}

reader.close();
// 等待剛剛執行的命令的結束
while ( true ) {
if (child.waitFor() == 0 ) break ;
}
} catch (Exception ex) {
child.destroy();
ex.printStackTrace();
}
}


批處理程式碼如下:

@echo off
rem
rem This is a Windows Shell Script that invokes a DB2 Command Window that
rem performs a database backup by calling the DB2 backup database command.
rem
set DB2INSTANCE=DB2
set DB2DATABASE=SAMPLE

db2 connect to %DB2DATABASE% user Administrator using Administrator
db2 export to "d:\employee.csv" of del modified by coldel, select * from EMPLOYEE
db2 disconnect %DB2DATABASE%
db2 terminate

相關文章