Windows环境下测试代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner; public class testTimer { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// ./szrpp_files/clPath
//写控制文件.ctl
String fileRoute = "D:\\test\\";//文件地址路径
String fileName = "test2015.txt";//数据文件名
String tableName = "test_table";//表名
String fieldName = "(name,userpwd,sex)";//要写入表的字段
String ctlfileName = "test_table.ctl";//控制文件名 stlFileWriter(fileRoute,fileName,tableName,fieldName,ctlfileName);
//要执行的DOS命令
String user = "SCOTT";
String psw = "123";
String Database = "//127.0.1.1:1521/ORCL";
IP要指向数据库服务器的地址 String logfileName = "test_table.log";
Executive(user,psw,Database,fileRoute,ctlfileName,logfileName); } /**
* * 写控制文件.ctl
* @param fileRoute 数据文件地址路径
* @param fileName 数据文件名
* @param tableName 表名
* @param fieldName 要写入表的字段
* @param ctlfileName 控制文件名
*/
public static void stlFileWriter(String fileRoute,String fileName,String tableName,String fieldName,String ctlfileName)
{
FileWriter fw = null;
String strctl = "OPTIONS (skip=0)" +
" LOAD DATA INFILE '"+fileRoute+""+fileName+"'" +
" APPEND INTO TABLE "+tableName+"" +
" FIELDS TERMINATED BY ','" +
" OPTIONALLY ENCLOSED BY \"'\"" +
" TRAILING NULLCOLS "+fieldName+"";
try {
fw = new FileWriter(fileRoute+""+ctlfileName);
fw.write(strctl);
}
catch (IOException e)
{
e.printStackTrace();
}
finally {
try
{
fw.flush();
fw.close();
}
catch (IOException e)
{
e.printStackTrace();
} }
} /**
* 调用系统DOS命令
* @param user
* @param psw
* @param Database
* @param fileRoute 文件路径
* @param ctlfileName 控制文件名
* @param logfileName 日志文件名
*/
public static void Executive(String user,String psw,String Database,String fileRoute,String ctlfileName,String logfileName)
{
InputStream ins = null;
//要执行的DOS命令 --数据库 用户名 密码 user/password@database
String dos="sqlldr "+user+"/"+psw+"@"+Database+" control="+fileRoute+""+ctlfileName+" log="+fileRoute+""+logfileName; String[] cmd = new String[]
{ "cmd.exe", "/C", dos }; // 命令
try
{
Process process = Runtime.getRuntime().exec(cmd);
ins = process.getInputStream(); // 获取执行cmd命令后的信息 BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
String line = null;
while ((line = reader.readLine()) != null)
{
String msg = new String(line.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(msg); // 输出
}
int exitValue = process.waitFor();
if(exitValue==0)
{
System.out.println("返回值:" + exitValue+"\n数据导入成功"); }else
{
System.out.println("返回值:" + exitValue+"\n数据导入失败"); } process.getOutputStream().close(); // 关闭
}
catch (Exception e)
{
e.printStackTrace();
}
} }

Linux环境下的测试代码:

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; public class TestLinux { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// ./szrpp_files/clPath
//写控制文件.ctl String fileRoute = "/home/test/";//文件地址路径
String fileName = "test2015.txt";//数据文件名
String tableName = "test_table";//表名
String fieldName = "(name,userpwd,sex)";//要写入表的字段
String ctlfileName = "ctltest.ctl";//控制文件名 stlFileWriter(fileRoute,fileName,tableName,fieldName,ctlfileName);
//要执行的DOS命令
String user = "scott";
String psw = "123";
String Database = "//127.0.0.1:1521/ORCL";
String logfileName = "logtext.log";
Executive(user,psw,Database,fileRoute,ctlfileName,logfileName);
} /**
* * 写控制文件.ctl
* @param fileRoute 数据文件地址路径
* @param fileName 数据文件名
* @param tableName 表名
* @param fieldName 要写入表的字段
* @param ctlfileName 控制文件名
*/
public static void stlFileWriter(String fileRoute,String fileName,String tableName,String fieldName,String ctlfileName)
{
FileWriter fw = null;
String strctl = "OPTIONS (skip=0)" +
" LOAD DATA INFILE '"+fileRoute+""+fileName+"'" +
" APPEND INTO TABLE "+tableName+"" +
" FIELDS TERMINATED BY ','" +
" OPTIONALLY ENCLOSED BY \"'\"" +
" TRAILING NULLCOLS "+fieldName+"";
try {
fw = new FileWriter(fileRoute+""+ctlfileName);
fw.write(strctl);
}
catch (IOException e)
{
e.printStackTrace();
}
finally {
try
{
fw.flush();
fw.close();
}
catch (IOException e)
{
e.printStackTrace();
} }
} /**
* 调用系统DOS命令
* @param user
* @param psw
* @param Database
* @param fileRoute 文件路径
* @param ctlfileName 控制文件名
* @param logfileName 日志文件名
*/
public static void Executive(String user,String psw,String Database,String fileRoute,String ctlfileName,String logfileName)
{
InputStream ins = null;
//要执行的DOS命令
String dos="sqlldr "+user+"/"+psw+"@"+Database+" control="+fileRoute+""+ctlfileName+" log="+fileRoute+""+logfileName;
//Linux环境下注释掉不需要CMD 直接执行DOS就可以
//String[] cmd = new String[]
//{ "cmd.exe", "/C", dos }; // Windows环境 命令
try
{
Process process = Runtime.getRuntime().exec(dos);
ins = process.getInputStream(); // 获取执行cmd命令后的信息
BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
String line = null;
while ((line = reader.readLine()) != null)
{
String msg = new String(line.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(msg); // 输出
}
int exitValue = process.waitFor();
if(exitValue==0)
{
System.out.println("返回值:" + exitValue+"\n数据导入成功"); }else
{
System.out.println("返回值:" + exitValue+"\n数据导入失败"); } process.getOutputStream().close(); // 关闭
}
catch (Exception e)
{
e.printStackTrace();
}
} }

 特别注意:

注意cmd命令执行的密码字符不能过于复杂 不能带有特殊符号 以免执行不通过 譬如有!@#¥%……&*之类的
 所以在Oracle数据库设置密码是不要太复杂  同时在数据库集群环境下的任何一IP地址都可以访问数据库的

1.你的程序部署在什么服务器下面 是在Oracle数据库服务器下 数据库连接IP地址配置可以不指明,如果部署在其他服务器下不在数据库服务器下数据库名的连接地址要指向明确的 所在数据库服务器IP地址,这个自己可以多次试验测试就晓得了。

程序部署所在的服务器一定要安装oracle客户端才能执行导入数据命令

2.测试程序只是实现了功能,但是放到你的项目程序中一定要多多测试自然会发现问题的,这个测试代码放到你的项目中时候一定要注意一些代码的改造,具体自己多测试就发现了。可以简单说明下 就在Executive()这个方法里面的代码只要稍加改造就好了,自己摸索下就明白了。

3.控制文件路径最好这样使用在引用到项目中时候:control="+clPath+File.separator+ctlfileName+"  log="+clPath+File.separator+logfileName

4.针对这段代码具体描述下

String strctl = "OPTIONS (skip=0)" +   // 0是从第一行开始  1是 从第二行
" LOAD DATA INFILE '"+fileRoute+""+fileName+"'" +
" APPEND INTO TABLE "+tableName+"" + //覆盖写入
" FIELDS TERMINATED BY ',' " + //--数据中每行记录用","分隔 ,TERMINATED用于控制字段的分隔符,可以为多个字符。
" OPTIONALLY ENCLOSED BY \"'\"" + //源文件有引号 '',这里去掉 ''''"
" TRAILING NULLCOLS "+fieldName+"";//--表的字段没有对应的值时允许为空 源数据没有对应,写入null

  

Java中使用Oracle的客户端 load data和sqlldr命令执行数据导入到数据库中的更多相关文章

  1. java实现EXCEL数据导入到数据库中的格式问题的解决

    之前作为项目甲方,加之java接触不多,在java web开发方面都是打下手的份. 对于EXCEL数据导入到数据库这个问题一直老是出现格式原因而导入失败也是未免惆怅,开发团队也是只说回去检查一下格式. ...

  2. c# SqlBulkCopy实现批量从数据集中把数据导入到数据库中

    今天遇到了一个导入类第一次见 SqlBulkCopy 可以实现从一个数据集导入到数据库中的表中 本来想从数据集中一条条遍历insert到库中 有了这个后发现: 只在把表与数据集的列做一下对应关系,再走 ...

  3. Java版将EXCEL表数据导入到数据库中

    1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls ...

  4. 数据清洗:按照进行数据清洗,并将清洗后的数据导入hive数据库中。

    虚拟机: hadoop:3.2.0 hive:3.1.2 win10: eclipse 两阶段数据清洗: (1)第一阶段:把需要的信息从原始日志中提取出来 ip:    199.30.25.88 ti ...

  5. 将 excel文件数据导入MySQL数据库中

    第一步:先将Excel文件另存为文本文件(制表符分割) 第二步:将生成的txt文件另存,并修改编码格式utf8; 第三步:将文件放到指定位置,或自己想要的位置: G:\city.txt 第四步:避免创 ...

  6. 在 Symfony Command中自定义脚本把Excel数据导入到数据库中

    // 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档 <?php/** * Created by IntelliJ IDEA. * User: davis * Date: 2019-0 ...

  7. 解析excel文件并将数据导入到数据库中

    今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助 一.需要导入的jar 1.commons-collect ...

  8. sqlserver怎么将excel表的数据导入到数据库中

    在数据库初始阶段,我们有些数据在EXCEL中做好之后,需要将EXCEL对应列名(导入后对应数据库表的字段名),对应sheet(改名为导入数据库之后的表名)导入指定数据库, 相当于导入一张表的整个数据. ...

  9. SQL语句:把Excel文件中数据导入SQL数据库中的方法

    1.从Excel文件中,导入数据到SQL数据库情况一.如果接受数据导入的表不存在 select * into jd$ from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ...

随机推荐

  1. OpenCV windows 上安装

    1.先按照  Anaconda , 有关教程,可以去其他博客查看 2.傻瓜的装Opencv.(我采用的) 在Anaconda  Prompt中输入: conda install -c https:// ...

  2. Docker安装和常用命令

    Docker安装 Docker的安装可以参考 https://docs.docker.com/ 下面的 Get Docker / Docker CE / Linux, 需要关注的主要是CentOS和U ...

  3. Ubuntu16.04, Gqrx通过RTL-SDR的Q通道收听中短波

    硬件准备 天线: 一根悬垂的3~4米长线天线, 如果只是临时使用, 直接用普通的0.75平方的聚氯乙烯多股软电线就可以了. 巴伦: 9:1巴伦 接收器: Q通道增加低频输入的RTL-SDR接收器 以及 ...

  4. 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库

    工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...

  5. C语言lseek()函数:移动文件的读写位置

    相关函数:dup, open, fseek 头文件:#include <sys/types.h>    #include <unistd.h> 定义函数:off_t lseek ...

  6. The method getServletContext() is undefined for the type HttpServletRequest

    request.getServletContext().getRealPath("/") 已经加入了 sun runtime library但是还是提示错误 是因为 写法过时了改成 ...

  7. 【SqlServer】SqlServer存储过程使用

    我们一开始学习数据库语言的时候就是用一些简单的insert,select等语法,但是随着我们学习数据库的深入,就会发现一些简单的语法满足不了我们的要求,比如处理一些业务逻辑,多表关联的时候,还有就是虽 ...

  8. Win10下Clion配置opencv3

    本人不想在爱机装一个vs2013或者vs2015这种庞然大物,可是手头要弄一个基于windows的opencv项目,就只好装了个Clion,期间踩了不少坑,记录一下. 参考网址:http://www. ...

  9. [aaronyang] nodejs学习-mongodb[1]

    1.资源提供与安装(ayjs.net) 学习说明:nodejs还是在非windows环境下操作好,所以一切还是 当前时间:2014年12月06日aaronyang 官网地址:www.mongodb.o ...

  10. Oracle 12C -- 删除PDB

    删除PDB SQL> select con_id,pdb_name,status from cdb_pdbs; CON_ID PDB_NAME STATUS ---------- ------- ...