当我在命令行上执行以下命令时,它会显示 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\'"});
但没有成功。