(1)定义需要导入的格式化数据文件路径,可以是CSV文件或者TXT文本文件;

  (2)定义导入数据库的方式为append,需要插入数据的表名为CZDS_CABIN;

  (3)定义数据间的分隔符为逗号,此处,还可以定义更多的控制命令,比如是否允许插入空数据命令trailing nullcols等等。

  (4)定义导入数据的对应的字段。这里所列的字段要与数据文件中每行数据中数据对应的列一致,因为SQLLOADER是按照这个顺序对数据进行插入的。其次,还有个值得注意的地方,在列名的后面可以用双引号定义导入后数据的格式。SQLLOADER导入数据时区分格式的,当插入数字和字符类型数据时可以根据文本进行自动转换,但是当插入数据是时间类型时,需要在此处定义格式转换,利用to_date方法将字符转化为日期再执行插入。同时,利用这个控制,可以实现对插入数据的格式化,比如利用lpad进行左填充等等,这也是SQLLOADER相对灵活的地方。

  第三步,通过SQLLOADER命令执行数据导入。

  这里的SQLLOADER命令是一个命令行命令,需要在JAVA程序中执行CMD程序来调用。

Process process = null;
try {
process = java.lang.Runtime.getRuntime().exec(cmd);
} catch (Exception e) {
e.printStackTrace();
}

  Cmd是需要执行的SQLLOADER命令。SQLLOADER命令如下:

  sqlldr userid=mrl/mrl123456 control=e:\test\control1.txt log=aa.log  bad=bad.bad direct=true parallel=true

  Userid指的是本地数据库的用户名和密码,不正确将连接不上数据库。

  Control的值是我们之前生成的控制文件路径,命令将会执行该控制文件。

  Log:这里定义了导入的日志文件路径。

  Bad:当导入失败时,该文件里存放了没有成功导入的数据记录。

  Direct:开启直接导入路径模式。

  Parallel:开启并发导入模式。

  在程序中执行此命令后,通过process.waitFor()方法来等待命令执行的返回,若返回值为0则说明程序正常结束,数据导入成功;如返回1,则说明数据导入中出现异常,需要排查日志文件,数据导入失败。

  利用SQLLOADER执行数据导入的缺点在于其对数据文件格式要求的严格以及其只能导入本地数据库,而无法执行远程导入,且导入数据只能通过闪存回滚,存在风险性。但其优点又很明显,导入数据速度非常快,通过测试结果显示,导入40万数据仅用了7-8秒,较之前额方法可谓一个飞跃,这也许是其赢得大家一致认可的原因所在。

  篇末,通过这次对数据导入功能实现方案的探索,我学习到了很多知识和技巧,对于数据导入的实现原理也有了自己的认识,也希望能和大家探讨交流。