2014-01-29 96 views
0

我運行的Oracle數據庫命令爲.dmp文件是這樣的:運行Oracle導入命令並查看控制檯輸出

String impcmd = "imp askul/[email protected] file=mydumpfile.dmp log=mylogfile.log fromuser=askul touser=askul full=N ignore=Y grants=Y indexes=Y"; 
Process p = Runtime.getRuntime().exec(impcmd); 
p.waitFor(); 
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line = br.readLine(); 
while(line != null){ 
System.out.println(line); 
line = br.readLine(); 
} 

的數據庫導入處於背景破天很好,但我希望能夠看到控制檯輸出爲Import,因爲我現在必須猜測它是否完整。我在這裏錯過了什麼?

回答

1

您需要在單獨的線程中捕獲標準輸出和標準錯誤(以防止阻塞)並在獲取時輸出,,同時等待進程完成

請注意,您可能需要讀取stdout stderr。或者您的輸出可能會轉到配置的日誌文件。

請參閱this answer瞭解更多信息和參考示例代碼。同時檢查this article,其中討論使用時的常見缺陷Runtime.exec()

+0

男人我不能從那篇文章中得到一件東西。 – ErrorNotFoundException

+0

問題到底是什麼? –

0

我相信你只是想將呼叫移至waitFor

// p.waitFor(); 
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line = br.readLine(); 
while(line != null){ 
    System.out.println(line); 
    line = br.readLine(); 
} 
p.waitFor(); // <-- to here. 
+0

在背景靜止happenning即使我移動'p.waitFor();'到while循環之後。 – ErrorNotFoundException

+0

你確定有控制檯輸出嗎? –

+0

如果我去cmd並執行該命令,它會顯示導入表...... 23rows ..這樣的事情。這是我想看到的。 – ErrorNotFoundException

相關問題