2011-11-17 62 views
0

我正在執行一堆SQL腳本並嘗試讀取輸出日誌文件,在執行每個文件後查找錯誤。使用Java讀取SQLCMD的輸出文件使用Java

下面是我如何執行腳本。

String strCommand = "sqlcmd -S SERVERNAME -d DBNAME -U USERNAME -P PASSWORD -r0 -i \"SCRIPT.sql\" 2> \"OUTPUT.LOG\" 1> NULL"; 
Process process = Runtime.getRuntime().exec(strCommand); 
process.waitFor(); 

我已將標準輸出重定向到NULL並將錯誤重定向到日誌文件。在執行上述語句後,立即嘗試使用File ReaderBufferedReader來讀取OUTPUT.LOG文件的內容。嘗試打開OUTPUT.LOG文件時引發異常。

(系統找不到指定的文件)

我檢查該文件應保存的路徑,不用說,它不存在。當我嘗試通過命令提示符手動執行命令時,它會按預期的方式工作並寫入帶有錯誤的日誌文件。我究竟做錯了什麼?

回答

2

如果你是從命令行運行的,你的重定向(2>等)將會工作,但是如果你像這樣直接從java運行,那麼你的重定向將不起作用。

嘗試以下操作(適用於Windows):

String strCommand = "cmd /c sqlcmd -S SERVERNAME -d DBNAME -U USERNAME -P PASSWORD -r0 -i \"SCRIPT.sql\" 2> \"OUTPUT.LOG\" 1> NULL"; 
Process process = Runtime.getRuntime().exec(strCommand); 
process.waitFor(); 

注意添加cmd /c,這將運行在命令shell的字符串。

+0

謝謝!這工作。我相信用'cmd'在shell中執行命令,然後退出,完成寫入文件。 – GPX