sqldr批量导入oracle数据库

论坛 期权论坛 脚本     
匿名技术用户   2021-1-4 20:09   11   0
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/orcl@orcl 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/orcl@orcl control=e:\\oracle\\data\\"+control);
  }
  createCtl(infiles.toString()); //创建控制文件
  Runtime.getRuntime().exec("cmd /c sqlldr scott/orcl@orcl 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();//关闭资源
 }

}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP