2010-11-11 24 views
1

我试图执行系统命令如exp来备份数据库。但是如果登录细节错误或者数据库不存在,那么它不会抛出异常。在java中执行方法从不抛出的异常

我该如何处理这种抛出异常的情况?

所有有用的双手欢迎..

问候, Swarupa

回答

0

这在很大程度上取决于你使用什么样的数据库软件。我会检查数据库的文件是否存在。 if((new File("dbfilename")).exists())

+0

我假设它是Oracle? http://www.adp-gmbh.ch/ora/admin/imp_exp.html – Curtis 2010-11-11 13:47:39

+0

我不认为它的甲骨文相关,因为问题是与exec()不与exp.Let我知道如果我错了。 – swarupa 2010-11-12 10:11:13

1

除非您可以从外部过程的返回代码中指出某些内容,否则您可能会运气不佳。我想你也许可以将exp的控制台输出插入一个文件或一个字符串缓冲区,然后解析它。你能用JDBC代替它吗?

+0

感谢柯蒂斯提供了宝贵的建议。现在即时尝试相同的方式。将输出重定向到一个文件中,然后将其作为错误编码。但是我想知道是否有更好的方法来完成它。使用JDBC,它是由于exp不是sql语句,所以不可能将db备份,让我知道如果im错误。 – swarupa 2010-11-12 09:27:21

1

Java exec运行一个外部进程。你将不得不得到exec()这个Process的返回值。 您应该检查Process.exitValue()以查看外部进程返回的错误。

您还可以从流程中获取inputStream,以查看您正在执行的程序的输出等内容。

+0

嗨斜坡,谢谢你的答复。但是当我试图得到process.exitValue()我面临illegalthreadstateexception.If如果我尝试读取th cmd的输出(如迪尔)后的值,那么我可以得到正确的退出值为0为目录和somewrongcmd 1.But即时通讯不能读取exp cmd的输出用同样的prgm写为dir.here是示例代码.. – swarupa 2010-11-12 09:29:02

+0

尝试 { Process p = Runtime.getRuntime() .exec(“exp infodba/infodba @ tc2007 FULL = y file = c:\\ temp \\ tc207_test_121.dmp”); // Process p = Runtime.getRuntime()。exec(“cmd/c gdsdfgfhg”); //只有当我们读取输入的ew时,才能得到差分错误码和失败成功 BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = reader.readLine(); (line!= null) { System.out.println(line); line = reader.readLine(); } System.out.println(p.exitValue()); } catch(Exception e2) \t {e2.printStackTrace(); \t System.out.println(“excep”);} – swarupa 2010-11-12 09:29:29