2014-01-29 77 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

相关问题