我正在为.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();
}
数据库导入在背景上发生了很好的事情,但是我希望能够在导入继续时看到控制台输出,因为我现在必须猜测它是否完整。我在这里失踪了什么?
答案 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.