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 'AssetID' の近くで、条件が予想されるコンテキストで指定された非ブール型の式。

それでも、">" を "=" に変更すると、正常に動作します。

なぜこれが起こっているのか、私に何ができるのか教えてください。

4

1 に答える 1

1

exec() の文字列配列バージョンを使用してコマンドを渡す必要があります。次を参照してください: http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec(java.lang.String []) これにより、すべての引数が適切にエスケープされます。

Java ランタイム 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 に答える