通常、私がこれを行うとき:
printf 'select x from Y \ngo\n' | isql -Uxx -Pxxxxxx -Dxxxxx -w 65535 -s ','
コマンドラインでは正常に実行されます。
以下のJavaコードでも。それは正常に動作します
public class test
{
public static void main(String[] args)
{
String DB="|isql -Uxx -Pxxxxxx -Dxxxxx -w 65535 -s ','";
String qpfx="printf \'";
String qsfx=" \ngo\n\'";
if(args[0]!=null)
try {
String cmd=qpfx+args[0]+qsfx+DB;
System.out.println("argument query is:"+args[0]);
System.out.println("Command is:"+cmd);
Process p = Runtime.getRuntime().exec(new String[]{"sh","-c",cmd});
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
}
catch(IOException e1) {}
catch(InterruptedException e2) {}
}
}
以下のようにJavaコードの上でこれを実行します。
java test "select x from Y"
列名の代わりに「select * from Y」として選択クエリを指定すると、問題が発生します。それは私が以下のように実行したかったときです:
java test "select * from Y"
上記の JAV コードがハングします。理由を教えてもらえますか?
以下は、ぶら下がっている出力です。
> java test "select * from Y"
argument query is:select * from Y
Command is:printf 'select * from Y
go
'|isql -Uxx -Pxxxxx -Dxxxxxx -w 65535 -s ','
私も試しました:
java test "select \* from Y"
しかし、それは実行されません。