2013-04-25 46 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用於交互式使用,不作爲(ab)用作API。您可以通過JDBC直接在Java中執行此操作,例如請參閱herehere。與使用JDBC相比,使用JDBC也會爲您提供更好的控制和調試選項。