2012-08-07 7 views
3

java 프로그램을 통해 SQL 로더를 사용하여 oracle 데이터베이스에 CSV 파일을로드하려고합니다. 내가 성공적으로 실행 명령에 의해 그것을 실행했지만 자바 프로그램을 통해 데이터베이스에 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

제 오류가 있습니다. 올바른 코드 :

2

나는 두려워하고, 성공적으로 실행되지 않으며, 단지 오류가 무엇인지 알지 못합니다.

sqlldr이 실행되었지만 파일을 DB로로드하지 못하면 Java가 저하되지 않습니다. 대신 Processreturn a non-zero exitValue이며 프로세스 콘솔에 일부 출력이있을 것입니다.

당신이해야 할 일은 take the InputStream of your Process이며 어떤 식 으로든 (예를 들어, 콘솔에 덤프) 출력하므로 sqlldr 출력 내용을 볼 수 있습니다. 또는 sqlldr의 출력을 sqlldrCmd 문자열의 파일로 리디렉션하십시오.