【问题标题】:Run Oracle import Command from Java and see Console output从 Java 运行 Oracle 导入命令并查看控制台输出
【发布时间】:2014-01-29 14:17:42
【问题描述】:

我正在为 .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();
}

数据库导入在后台运行良好,但我希望能够在导入继续时看到控制台输出,因为我现在必须猜测它是否完成。我在这里错过了什么?

【问题讨论】:

    标签: java oracle imp


    【解决方案1】:

    您需要在单独的线程中捕获标准输出和标准错误(以防止阻塞)并在获得时输出它,同时等待进程完成

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

    请参阅this answer 了解更多信息和示例代码参考。另请查看this article,其中讨论了使用Runtime.exec() 时的常见陷阱

    【讨论】:

    • 伙计,我无法从那篇文章中得到任何信息。
    • 到底是什么问题?
    【解决方案2】:

    我相信你只是想把电话转到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.
    

    【讨论】:

    • 即使在我将 p.waitFor(); 移动到 while 循环之后,后台仍然发生。
    • 你确定有控制台输出可以得到吗?
    • 如果我去 cmd 并执行这个命令,它会显示导入表...... 23rows .. 像这样的东西。这就是我想看到的。
    • 可以输出到stderr吗?
    猜你喜欢
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多