4

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

  1. 加载CSV.csv:

    ID,firstName,LastName,Address
    1,aditya,kumar,gaya
    2,abhijeet,chanda,kol
    3,Rahul,Jordar,kol
    
  2. 试用.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 回答 2

2

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

请注意,如果sqlldr已执行,但将文件加载到 DB 中失败,您将不会获得任何 Java 字幕。相反,Process返回一个非零的 exitValue,并且进程的控制台上可能会有一些输出。

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

于 2012-08-07T08:48:14.260 回答
2

我得到了我的错误。正确的代码是:

  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();
    }
   }
  }
于 2012-08-08T09:25:57.030 回答