将csv文件数据加载到oracle数据库中

时间:2012-08-07 08:35:03

标签: java sql-loader

我正在尝试使用sql loader通过java程序在oracle数据库中加载csv文件。我已经通过run命令成功执行了它,但我想通过java程序在数据库中加载csv文件数据。我的节目是:

  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();
            }
        }
    }
    
  4. 它已成功编译并运行,但未在数据库中插入任何数据。你的建议非常感谢。提前谢谢。

2 个答案:

答案 0 :(得分:2)

我害怕,它没有成功运行,你只是不知道错误是什么。

请注意,如果sqlldr被执行但是失败,请将文件加载到DB中,您将不会获得任何Java摘要。相反,Processreturn a non-zero exitValue,并且进程'控制台上可能会有一些输出。

您需要做的是take the InputStream of your Process,并以某种方式记录它(例如,将其转储到控制台中),这样您就可以看到sqlldr输出是什么。或者,将sqlldr的输出重定向到sqlldrCmd字符串中的文件。

答案 1 :(得分: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();
    }
   }
  }