项目中需要导入几十MB、上百MB的TXT文本文件,利用oracle的sql loader导入非常不错。
String cmd = "sqlldr userid=数据库用户名/密码@数据库监听实例名 skip=1 errors=0 control=d:/test.ctl data=d:/test.txt log=d:/log/log.log bad=d:/log/bad.bad ";
//返回与当前 Java 应用程序相关的运行时对象
Runtime run = Runtime.getRuntime();
// 启动另一个进程来执行命令
Process p = run.exec(cmd);
if (p.waitFor() != 0) {
if (p.exitValue() == 0) {
//p.exitValue()==0表示正常结束,1:非正常结束
System.out.println(“执行成功”);
}else {
System.out.println(“执行出错”);
}
}
test.ctl文件:
LOAD DATA
TRUNCATE
INTO TABLE 表名
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
(
name,
password,
createTime date 'YYYY-MM-DD HH24:MI:SS'
)
test.txt
姓名|密码|导入时间
李坏|123456|2012-12-24 22:10:23
叶开|123456|2012-12-24 22:10:23
cmd命令中的skip=1表示跳过导入文件中的第一行,log=d:/log/log.log导入成功的日志文件, bad=d:/log/bad.bad导入失败的日志文件。
test.ctl文件中的TRUNCATE INTO标识全量更新,就是会把表的数据全部删掉,再导入。 (APPEND INTO则是增量,不会删表中的数据)。