0

コマンド ラインで以下のコマンドを実行すると、sybase DB 内のすべてのストアド プロシージャとテーブルが表示されます。

printf 'sp_help\ngo\n' | isql -Uxx -Pxxxx -Dxxxxx

しかし、Javaで同じことをすると. これは結果を返しません。以下のコードの問題点を教えてください。

public class test
{
  public static void main(String[] args)
  {
   String cmd = "printf "+"\'sp_help\ngo\n\'"+"| isql -Uxx -Pxxxx -Dxxxxx" ;
   try{ 
          Process p;
          p = Runtime.getRuntime().exec(cmd);
          p.waitFor();
          String line; 
          BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

           while ((line = reader.readLine())!=null){
           System.out.println("Row is :" + line);
   } catch(Exception e)
       {
           System.out.println("Exception Caught : " + e);
       }

  }

}

編集 Darkdust が提案する以下のように実行しましたが、それでも機能しません。

try{
          Process p;
          p = Runtime.getRuntime().exec("sh -c \'printf \"sp_help\ngo\n\" | isql -Uxx -Pxxxxx -Dxxxxxx\'");
          p.waitFor();
          String line;
          BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

           while ((line = reader.readLine())!=null){
           System.out.println("Row is :" + line);
  }
 }
       catch(Exception e)
       {
           System.out.println("Exception Caught : " + e);
       }

しかし、コマンド:

sh -c 'printf "sp_help\ngo\n" | isql -Usa -Psybase11 -Dcnadb'

コマンドラインで動作します。

私も試しました:

p = Runtime.getRuntime().exec(new String[]{"sh","-c","\'printf \"sp_help\ngo\n\"","|isql -Uxx -Pxxxxx -Dxxxxx\'"});

しかし、成功しませんでした。

4

1 に答える 1

1

いくつかのことが思い浮かびます:

  • PATH 環境変数が不完全です (したがってisql、見つかりません)。
  • それがあなたが提供するコマンドである場合、PATHをいじる代わりに、正しい作業ディレクトリにいることを確認して./isql代わりに呼び出すことをお勧めします。
  • パイプを使用しているため、シェルにこれを のように実行させる必要がありますsh -c "foo | bar"。それ以外の場合は、| isql ...パーツも引数として渡されますprintf
于 2013-08-06T13:12:46.170 に答える