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. 安装xenapp后,非管理员连接RDP出现桌面当前不可用的解决方法

    安装完xenapp后,非管理员帐号就不能远程登录到2008服务器. 修改方法如下:1.启动 Citrix AppCenter展开citrix资源.Xenapp.<场地>.策略,右面的窗格切 ...

  2. Unrecognized option: -jrockit

    weblogic报错: starting weblogic with Java version: Unrecognized option: -jrockit Error: Could not crea ...

  3. android适配不同分辨率的手机

    android中不同手机分辨率适配问题 在项目开发的过程中,同一个布局对应不同的手机会显示出不同的效果.导致这个现象产生的原因是不同手机的分辨率不同.在android sdk提供的帮助文档中,我们可以 ...

  4. Dockerfile 构建后端springboot应用并用shell脚本实现jenkins自动构建

    Dockerfile 文件构建docker镜像 FROM centos MAINTAINER zh*****eng "z*******ch.cn" ENV LANG en_US.U ...

  5. ios中uiview 转场动画

    //转场动画1--头尾 -(void)TransitionAnimation1{ [UIView beginAnimations:nil context:nil]; [UIView setAnimat ...

  6. Spring3.0.3使用之异常解决

    2010-10-29  温馨提示:         以下异常仅在Spring3.0.3版本中遇到,其他版本可能也会遇到,读者可作参考.不保证会顺利通过.         近期在学习Spring3的一些 ...

  7. Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (mysql)

    1/自动生成的jar包:mybatis-generator-core-1.3.2.jar   2/generatorconfig.xml文件如: <?xml version="1.0& ...

  8. hihocoder第212周-动态规划

    题目链接 import java.util.Scanner; public class Main { long mod = (long) (1e9 + 7); int MAXN = 107; int ...

  9. 在 iOS 中实现方法链调用

    编译:伯乐在线 - 林欣达 如有好文章投稿,请点击 → 这里了解详情 如需转载,发送「转载」二字查看说明 前言 链式调用(chained calls)是指在函数调用返回了一个对象的时候,使得这个调用链 ...

  10. webpack window 添加ES6支出

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:张轩链接:http://zhuanlan.zhihu.com/p/20367175来源:知乎 如果现在你的项目还没有对ES6的 ...