java - 使用Java读取SQLCMD的输出文件

标签 java sql-server logging process sqlcmd

我正在执行一堆 SQL 脚本,并尝试在每个文件执行后读取输出日志文件,查找错误。

这是我执行脚本的方式。

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 文件时引发异常。

(The system cannot find the file specified)

我检查了文件应该保存的路径,不用说,它不在那里。当我尝试通过命令提示符手动执行命令时,它会按预期工作并写入带有错误的日志文件。我做错了什么?

最佳答案

如果您从命令 shell 运行,您的重定向(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 中运行该字符串。

关于java - 使用Java读取SQLCMD的输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8165723/

相关文章:

c# - 如何在 Linq 或 SQL 中递归调用 Where 子句

c# - Asp.Net MVC 默认路由

java - 使 log4j 可加性等于 true 或 false 的结果是什么?

java - 如何在 SoapUI 中明智地比较两个 XML 文件?

java - 链接的java列表

java - 在测试环境中使用 MariaDB,在生产环境中使用 sql server,如何同时使用一个选择? - Java, Spring

java - 映射到 hbm.xml 文件时无法提取 ResultSet

java - HIbernate 给出未知实体异常

java - 从键盘(控制台)读取字符,而无需按Enter键

java - 了解 Logback 和 Slf4j