从Java运行Oracle import命令并查看控制台输出

时间:2014-01-29 14:17:43

标签: java oracle imp

我正在为.dmp文件运行Oracle数据库命令,如下所示:

String impcmd = "imp askul/askul@askdb 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();
}

数据库导入在背景上发生了很好的事情,但是我希望能够在导入继续时看到控制台输出,因为我现在必须猜测它是否完整。我在这里失踪了什么?

2 个答案:

答案 0 :(得分:1)

您需要在单独的线程中捕获stdout和stderr(以防止阻塞),并在等待完成的过程中输出

请注意,您可能需要同时阅读stdout stderr。或者您的输出可能会转到配置的日志文件。

有关详细信息和示例代码的参考,请参阅this answer。另请查看this article,其中讨论了使用Runtime.exec()

时常见的陷阱

答案 1 :(得分: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.