使用Runtime.getRuntime()。exec()在运行时在java中执行sql语句

时间:2013-06-17 08:54:09

标签: java sql runtime execute

在下面的代码中while循环未运行。有人可以告诉我这段代码出了什么问题。

import java.io.*;

public class A 
{
    public static void main(String args[]) {
        int value = 0;
        String sql = "SELECT * FROM A2A_TP_INFO";
        String filename="file.txt";
        String filepath="/home/mit"+"export/file.txt";
        String exportQuery = "/home/mit/JavaProj/proj/export/query";
        String cmd[] = {
            "/bin/ksh",
            "-c",
            "" + exportQuery + " " +filepath+ "   \""
            + sql + ";\" " 
        };

        try {
            //Process p = Runtime.getRuntime().exec(cmd);
            Process p1=Runtime.getRuntime().exec(sql);
            // p.waitFor();
            BufferedReader input = new BufferedReader(new InputStreamReader(
                p1.getInputStream())); 

            while ((value = input.read()) != -1) {
                char c = (char) value;
                System.out.println(c);
            }
            input.close();
        } catch (Exception exp) {
            exp.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

不要使用中间shell。并使用ProcessBuilder

final List<String> fullCommand = Arrays.asList(exportQuery, filePath, sql + ';')
final ProcessBuilder builder = new ProcessBuilder(fullCommand);
final Process p = builder.start();

请注意,使用ProcessBuilder可以将stdout / stderr发送到文件,甚至可以自定义stdin。您可以设置工作目录,自定义环境等。使用它。真。 Runtime.exec()没有理由再使用了。

相关问题