gpt4 book ai didi

java - 从 Java 执行时 Psql 脚本未提交

转载 作者:行者123 更新时间:2023-12-01 14:38:40 25 4
gpt4 key购买 nike

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

有什么想法吗?谢谢,

最佳答案

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

关于java - 从 Java 执行时 Psql 脚本未提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16217060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com