コマンド ラインで以下のコマンドを実行すると、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\'"});
しかし、成功しませんでした。