欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sqldr批量导入oracle数据库

程序员文章站 2022-06-11 11:37:39
...
1.创建指定用户下的表
表结构:
create table scott.demo
(
id varchar2(40),
name varchar2(20),
description varchar2(40)

)

select * from demo

2.添加到demo20170101.csv 文件中内容,并放到指定目录下

3.创建控制文件democontrol.ctl
控制文件中的内容:
load data                                
infile 'E:\oracle\data\demo20170101.csv'      
append into table scott.demo       
fields terminated by ','                   
optionally enclosed by '"'                 
(id,name,description)

4.当前文件存放路径执行:>sqlldruserid=用户名/密码[@数据库字符串]control=控制文件
运行cmd--->
sqlldr scott/[email protected] control=e:\oracle\data\democontrol.ctl


cmd 运行  sqlldr userid=用户名/密码@数据库 control='ctl文件路径' log='log文件路径' 

用java 调用cmd 执行循环调用控制文件

package cn.ss.csv.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 第二种方式实现csv文件数据导入到oracle数据库中
 * 秒传
 * @author Administrator
 *
 */
public class Test1 {
	private final static String LINE_SEPARATOR = System.getProperty("line.separator");//行分割符
	public static void main(String[] args) throws IOException {
		
		runtest();
//		String control =createCtl("D:\\demo1\\demo20170101.csv","demo20170101");
	}

	public static void runtest() throws IOException {
		File dir = new File("D:\\demo1");//目录是否存在 用绝对路径
		if(!dir.exists()){
			dir.mkdir();
		}
		File[] listFiles = dir.listFiles(new FilenameFilter() {
			String suffix = ".csv";
			@Override
			public boolean accept(File dir, String name) {
				// TODO Auto-generated method stub
				return name.endsWith(suffix);
			}
		});
		StringBuffer infiles = new StringBuffer();
		for (File file : listFiles) {
			String absolutePath = file.getAbsolutePath();
			String name = file.getName();
//			System.out.println(name+":"+absolutePath);
			absolutePath.replace('\\', '/');
			System.out.println(absolutePath);
			infiles.append("infile '"+absolutePath+"'").append(LINE_SEPARATOR);
			
			//执行控制文件
//		Runtime.getRuntime().exec("cmd /c sqlldr scott/[email protected] control=e:\\oracle\\data\\"+control);
		}
		createCtl(infiles.toString()); //创建控制文件
		Runtime.getRuntime().exec("cmd /c sqlldr scott/[email protected] control=e:\\oracle\\data\\control.ctl");
	}

	/**
	 * 创建控制文件 并返回控制文件名
	 * @param absolutePath
	 * @return
	 * @throws FileNotFoundException 
	 */
	private static void createCtl(String infiles) throws FileNotFoundException {
		File control  = new File("e:\\oracle\\data\\control.ctl"); //存放控制文件目录
		
		StringBuffer content = new StringBuffer();
		content.append("load data").append(LINE_SEPARATOR);
		content.append(infiles).append(LINE_SEPARATOR);
		content.append("append into table scott.demo").append(LINE_SEPARATOR);
		content.append("fields terminated by ','").append(LINE_SEPARATOR);
		content.append("optionally enclosed by '\"' ").append(LINE_SEPARATOR);
		content.append("(id,name,description)");
		
		PrintWriter out = new PrintWriter(control);
		out.write(content.toString());
		out.close();//关闭资源
	}

}