java - 从 Java 7 调用 SQLCMD

标签 java

我在从 Java 执行 sqlcmd 时遇到错误。我的代码如下:

Process process = Runtime.getRuntime()
                         .exec("sqlcmd -m-1 -S localhost,1433 -d my_server -U sa 
                                -P abc -Q \"select * from Assests where AssetID > 
                                'G123204E4-1234-4A31-B37B-0092D68DA429'\" -k2 -W 
                                -h-1 -s\",\" -o \"D://Assests.csv\"");

虽然从 sqlclient 运行 sqlcmd 它工作正常但是从 Java 它给出以下表达式错误:

Msg 4145, Level 15, State 1, Server SANDEEPB-PC, Line 1 An expression of non-boolean type specified in a context where a condition is expected, near 'AssetID'.

然而,当我将“>”更改为“=”时,它工作正常。

谁能告诉我为什么会这样,我能做些什么?

最佳答案

您应该使用 exec() 的字符串数组版本传递命令,请参阅: http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec(java.lang.String[]) 这将正确地转义所有参数。

参见 Java Runtime exec() fails to escape characters properly

应该是这样的(未测试);

Process process = Runtime.getRuntime()
    .exec(new String[] {"sqlcmd", "-m", "-1", "-S", "localhost,1433", "-d", "my_server", "-U", "sa", "-P", "abc", "-Q", "select * from Assests where AssetID > 'G123204E4-1234-4A31-B37B-0092D68DA429'", "-k2", "-W", "-h", "-1", "-s", ",\"", "-o", "D://Assests.csv"});

用于 MySQL(已测试)

Process process = Runtime.getRuntime()
                .exec(new String[] {"mysql", "-u", "root", "-ppassword","-e", "select 1<2"});

关于java - 从 Java 7 调用 SQLCMD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17491851/

相关文章:

java - JUnit:如何检查一个方法是否调用另一个方法?

java - 在eclipse中编辑xml时如何让Ctrl-F11构建项目?

java - JPanel 网格问题

java - JComboBox 和 Action、新模型等

java - 减少 GridLayout Java Swing 中的空间

java - 当涉及的所有指令都是内存 I/O 时,多线程是否比串行执行有任何优势

java - 如果我在配置类上使用 @ActiveProfiles 注释而不是在定义我的 bean 的类上使用它,在 Spring 中会发生什么?

java - 通用 ConstraintViolations 集的异常

java - 优化文件下载

java - Stream.of VS Arrays.stream 从值中获取枚举