从Java执行时,Psql脚本不提交

时间:2013-04-25 14:12:15

标签: java cmd psql sqltransaction

我有一个.bat文件,它执行psql命令来导入SQL脚本文件。当我从Windows命令行执行.bat文件时,它正确执行。但是当我从Java调用.bat文件(使用ProcessBuilder)时,脚本不会结束。我没有收到任何错误,不是在InputStream中,ErrorStream甚至没有在DB(Postgresql)日志中。

ArrayList<String> cmdArgs2 = new ArrayList<String>();
        cmdArgs2.add("sql2dbs.bat");


        ProcessBuilder pb2 = new ProcessBuilder(cmdArgs2);
        logger.info(pb2.command().toString());

        Map<String, String> env = pb2.environment();
        env.put("PGPASSWORD", "user");

        Process p2 = pb2.start();

        BufferedReader stdError2 = new BufferedReader(new InputStreamReader(p2.getErrorStream()));
        String s;
        while ((s = stdError2.readLine()) != null) {
            logger.info(s);
        }

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(p2.getInputStream()));
        while ((s = stdIn.readLine()) != null) {
            logger.info(s);
        }

        p2.waitFor();

SQL脚本很长,这就是我不添加它的原因。该脚本底部有一个COMMIT语句。

有什么想法吗?谢谢,

1 个答案:

答案 0 :(得分:1)

不要使用psql运行批处理脚本将数据导入数据库。 psql用于交互式使用,不能(ab)用作API。您可以通过JDBC直接在Java中执行此操作,例如参见herehere。与shelling out相比,使用JDBC还可以为您提供更好的控制和调试选项。