2010-11-11 26 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