从Java执行时未提交Psql脚本

从Java执行时未提交Psql脚本,java,cmd,psql,sqltransaction,Java,Cmd,Psql,Sqltransaction,我有一个.bat文件,它执行psql命令来导入SQL脚本文件。当我从Windows命令行执行.bat文件时,它会正确执行。但是当我从Java(使用ProcessBuilder)调用.bat文件时,脚本并没有结束。我没有收到任何错误,InputStream中没有,ErrorStream甚至在DB(Postgresql)日志中也没有 ArrayList cmdArgs2=new ArrayList(); cmdArgs2.add(“sql2dbs.bat”); ProcessBuilder pb2=

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

ArrayList cmdArgs2=new ArrayList();
cmdArgs2.add(“sql2dbs.bat”);
ProcessBuilder pb2=新的ProcessBuilder(cmdArgs2);
logger.info(pb2.command().toString());
Map env=pb2.environment();
环境投入(“PGPASSWORD”、“user”);
进程p2=pb2.start();
BufferedReader stdError2=新的BufferedReader(新的InputStreamReader(p2.getErrorStream());
字符串s;
而((s=stdError2.readLine())!=null){
记录者信息;
}
BufferedReader stdIn=新的BufferedReader(新的InputStreamReader(p2.getInputStream());
而((s=stdIn.readLine())!=null){
记录者信息;
}
p2.waitFor();
SQL脚本非常长,这就是我不添加它的原因。脚本的底部确实有一个COMMIT语句


有什么想法吗?谢谢,

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

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();