2

我面临从 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 运行时,它给出以下表达式错误:

消息 4145,级别 15,状态 1,服务器 SANDEEPB-PC,第 1 行 在预期条件的上下文中指定的非布尔类型表达式,靠近“资产 ID”。

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

有人可以告诉我为什么会发生这种情况以及我能做些什么吗?

4

1 回答 1

1

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

请参阅Java Runtime exec() 无法正确转义字符

它应该看起来像这样(未经测试);

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"});
于 2013-07-05T15:13:10.933 回答