0

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 ステートメントがあります。

何か案は?ありがとう、

4

1 に答える 1

2

psqlデータをデータベースにインポートするために使用するバッチ スクリプトを実行しないでください。psqlインタラクティブな使用のために作成されており、API として (ab) 使用されることはありません。これは、JDBC を介して Java で直接行うことができます。たとえば、こちらまたはこちらを参照してください。また、JDBC を使用すると、シェルアウトに比べてはるかに優れた制御とデバッグのオプションが得られます。

于 2013-04-26T10:40:37.880 に答える