【问题标题】:Psql script not committing when executed from Java从Java执行时Psql脚本未提交
【发布时间】:2013-04-19 11:36:54
【问题描述】:

我有一个执行 psql 命令以导入 SQL 脚本文件的 .bat 文件。当我从 Windows 命令行执行 .bat 文件时,它可以正确执行。但是当我从 Java(使用 ProcessBuilder)调用 .bat 文件时,脚本并没有结束。我没有收到任何错误,在 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 语句。

有什么想法吗?谢谢,

【问题讨论】:

    标签: java cmd psql sqltransaction


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      相关资源
      最近更新 更多