2013-04-25 7 views
0

psql 명령을 실행하여 SQL 스크립트 파일을 가져 오는 .bat 파일이 있습니다. Windows 명령 줄에서 .bat 파일을 실행하면 올바르게 실행됩니다. 하지만 Java에서 ProcessBuilder를 사용하여 .bat 파일을 호출하면 스크립트가 종료되지 않습니다. 나는 어떤 에러도 발생시키지 않고, InputStream에는 없다. ErrorStream은 DB (Postgresql) 로그조차도 아니다.Java에서 실행할 때 Psql 스크립트가 실행되지 않습니다.

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 문이 있습니다.

아이디어가 있으십니까? 감사,

답변

1

psql을 사용하여 배치 스크립트를 실행하여 데이터를 데이터베이스로 가져 오지 마십시오. psql은 대화 형으로 사용되며 API로 사용되지 않습니다. JDBC를 통해 Java에서 직접이 작업을 수행 할 수 있습니다 (예 : here 또는 here 참조). JDBC를 사용하면 포격과 비교하여 제어 및 디버깅 옵션이 훨씬 향상됩니다.

관련 문제