关于cmd:Psql脚本在从Java执行时不提交

Psql script not committing when executed from Java

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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语句。

有任何想法吗? 谢谢,


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