0

通常、私がこれを行うとき:

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"

しかし、それは実行されません。

4

1 に答える 1

0

深刻なデバッグの後、ハングしている行がp.waitFor();.

この完全な記事を読む必要があり、最終的に解決策を見つけました。コードのwhileループの後にシフトしまし p.waitFor();たが、うまくいきました。

于 2013-08-12T10:21:11.613 に答える