2012-08-07 77 views
3

我試圖通過加載Java程序使用SQL裝載機在Oracle數據庫csv文件。我已經成功地通過運行命令執行它,但我想通過Java程序在數據庫中加載csv文件數據。我的方案是:加載csv文件數據到oracle數據庫

  1. loadCsv.csv:

    ID,firstName,LastName,Address 
    1,aditya,kumar,gaya 
    2,abhijeet,chanda,kol 
    3,Rahul,Jordar,kol 
    
  2. trial.ctl:

    LOAD DATA 
    INFILE loadCsv.csv 
    BADFILE trial.bad 
    DISCARDFILE trial.dsc 
    APPEND 
    INTO TABLE load1 
    FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "」" 
    (x,y,z,t) 
    
  3. SqlLoaderTest.java:

    public class SqlLoaderTest 
    { 
        public static void main(String[] args) { 
         try { 
          String sqlldrCmd = "sqlldr control=E:\\load_data\\trial.ctl"+ 
           "LOG=trial.log "+ 
           "DATA=E:\\load_data\\loadCsv.csv USERID=vehere/adi"+ 
           "BAD=E:\\load_data\\trial.bad"; 
          System.out.println("SQLLDR Started ....... "); 
          Runtime rt = Runtime.getRuntime(); 
          Process proc = rt.exec(sqlldrCmd); 
          System.out.println("SQLLDR Ended ........ "); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
    } 
    

它已成功編譯並運行,但未在數據庫中插入任何數據。您的建議非常感謝。提前告知。

回答

1

我得到了我的錯誤。正確的代碼是:

public class SqlLoaderTest 
    { 
    public static void main(String[] args) { 
    try { 
     String sqlldrCmd = "sqlldr username/pwd, control=trial.ctl"; 

     System.out.println("SQLLDR Started ....... "); 
     Runtime rt = Runtime.getRuntime(); 
     Process proc = rt.exec(sqlldrCmd); 
     System.out.println("SQLLDR Ended ........ "); 
     } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
    } 
2

我很害怕,但沒有成功運行,你只是不知道是什麼錯誤。

需要注意的是,如果sqlldr被執行,但未能辦將文件加載到數據庫,你不會得到任何Java excaptions。相反,Process將爲return a non-zero exitValue,並且在進程的控制檯上可能會有一些輸出。

您需要做的是take the InputStream of your Process,並以某種方式記錄它(例如,將其轉儲到控制檯中),以便您可以看到sqlldr輸出是什麼。或者,將sqlldr的輸出重定向到您的sqlldrCmd字符串中的文件。