日期:2014-05-18  浏览次数:20768 次

java执行oracle备份命令总失败, why
strCmd = new String("cmd /c exp root/123456@testdb file=c:/zzz2.dat");

try {
    Process p = java.lang.Runtime.getRuntime().exec(strCmd );
    while (true) {
     if (p.waitFor() == 0)
      break;
    }
   } catch (Exception e) {
}

调试时发现: 执行p.waitFor() 就不动了。

以上cmd命令我直接在命令行下执行就没有问题。

以上程序执行mysql备份命令mysqldump也没有问题。

------解决方案--------------------
要解决好几个问题:
1、getOutputStream();
2、getErrorStream();
3、getInputStream(); // 这个如果确认不需要输入,可以不管,但风险自担。
------解决方案--------------------
exp root/123456@testdb file=c:/zzz2.dat放到bat批处理脚本里(要保证能双击执行),然后java.lang.Runtime.getRuntime().exec("XXX.bat");
------解决方案--------------------
备份操作是不是会有显示?需要将显示内容打印出来,不然可能一直阻塞在显示的地方。可以这么做试试:

...
            String s;
            BufferedReader bufferedReader =
                new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((s = bufferedReader.readLine()) != null)
            {
                System.out.println(s);//将回显内容打印出来
            }
...

------解决方案--------------------

Process p = java.lang.Runtime.getRuntime().exec(strCmd );
InputStream is = p.getErrorStream();
if (is == null) {
           sys.out("错误!");
}