我正在尝试使用sql loader通过java程序在oracle数据库中加载csv文件。我已经通过run命令成功执行了它,但我想通过java程序在数据库中加载csv文件数据。我的节目是:
loadCsv.csv:
ID,firstName,LastName,Address
1,aditya,kumar,gaya
2,abhijeet,chanda,kol
3,Rahul,Jordar,kol
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)
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();
}
}
}
它已成功编译并运行,但未在数据库中插入任何数据。你的建议非常感谢。提前谢谢。
答案 0 :(得分:2)
我害怕,它没有成功运行,你只是不知道错误是什么。
请注意,如果sqlldr
被执行但是失败,请将文件加载到DB中,您将不会获得任何Java摘要。相反,Process
将return 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();
}
}
}