加载csv文件到oracle数据库
问题描述:
嗨我想在java数据库中使用java加载csv文件,但我得到的错误如"ora-00900 invalid sql statement"
。我正在使用Oracle Database 11g企业版。所以我不明白为什么它不接受我的加载语句。任何帮助?提前致谢。加载csv文件到oracle数据库
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class test {
public static void main(String[] args){
test t=new test();
t.inserintoDb("C:\\Users\\fiels\\2.csv");
}
public void inserintoDb(String path){
Connection conn=null;
Statement stmt=null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=(Connection) DriverManager.getConnection(
"jdbc:oracle:thin:@address:orcl","user","password");
stmt=conn.createStatement();
String select1="truncate table table1";
stmt.execute(select1);
String select2="LOAD DATA INFILE'" +path+"' INTO TABLE table1 FIELDS TERMINATED BY ',' (customer_nbr, nbr)";
stmt.execute(select2);
}catch(Exception e){
e.printStackTrace();
}
}
}
答
infile是否适用于Oracle? It seems that only on MySql.。 SQL Loader替代方案非常快速。检查official documentation以了解如何配置它:
由于问题指出您想使用Java here是从Java调用SQL Loader的帮助。它bassically采用了运行,但依赖于操作系统:
String[] stringCommand = { "bash", "-c", "/usr/bin/sqlldr username/[email protected] control=/path/to/sample.ctl"};
Runtime rt = Runtime.getRuntime();
Process proc = null;
try {
proc = rt.exec(stringCommand);
}catch (Exception e) {
// TODO something
}finally {
proc.destroy();
}
但如果你只是想加载一些表格供个人使用,你不会需要的Java。您可以从.bat文件调用它。
+0
好的,谢谢:) – user3428496
您可能需要'INFILE'和撇号'''之间的空格。 – Andreas
你应该考虑使用Prepared Statements –
Oracle中没有'LOAD DATA INFILE'。 –