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("错误!");
}