2011-11-17 37 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