【Java/shell/Oracle】Java使用Runtime和Process调用sqlldr命令向Oracle数据库某表批量塞入数据

【前篇】

https://www.cnblogs.com/heyang78/p/16021687.html

【需求】

通过JDBC Batch的方式通过网络传输数据仍嫌不足,希望在数据迁移目标的服务器上建立目录,将csv格式的数据文件传输过去然后使用sqlldr批量导入数据。

要实现这个需求需要在服务器端建立一个Java程序,然后通过调用这个程序来间接调用sqlldr。

【代码】

package com.hy.lab.shell1;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class OracleCtlTest {
    public static void main(String[] args) throws Exception{
        Runtime runtime = Runtime.getRuntime();
        Process prcs= runtime.exec("sqlldr userid=luna/1234@127.0.0.1:1521/orcl control=c:\\temp\\loaddata.ctl");

        BufferedReader bufReader = new BufferedReader(new InputStreamReader(prcs.getInputStream(), "GBK"));
        String line = null;
        while ((line = bufReader.readLine()) != null) {
            System.out.println(line);
        }

        int errCode = prcs.waitFor();
        System.out.println("Exited with error code:" + errCode);
    }
}

【代码使用到的控制文件loaddata.ctl】

options(skip=0,BINDSIZE=20971520, ROWS=10000, READSIZE=20971520, ERRORS=999999999)
load data
infile 'c:\temp\emp_test.csv'
insert into table "EMP_TEST"
fields terminated by ','  
Optionally enclosed by '\''  
(id,name,age)

以上标红色的位置是需要指明的数据文件,表名和字段名,这些还是需要通过网络传输的。

【输出】

SQL*Loader: Release 11.2.0.1.0 - Production on 星期一 3月 21 09:32:26 2022

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

达到提交点 - 逻辑记录计数 3
达到提交点 - 逻辑记录计数 4
Exited with error code:0

【控制文件指向的CSV中数据】

1,andy,23
2,bill,24
3,cindy,25
4,douglas,26

这个csv,是生成后需要用FTP的方式送到数据迁移目标的服务器上某目录的,传完了再通知服务器上程序(即本程序的完整版)开始运作。

【执行完毕后数据库中数据】

SQL> truncate table  emp_test;

表被截断。

SQL> select * from emp_test;

未选定行

SQL> select * from emp_test;

        ID NAME                        AGE
---------- -------------------- ----------
         1 andy                         23
         2 bill                         24
         3 cindy                        25
         4 douglas                      26

由此可见任务已经完成。

END

posted @ 2022-03-21 09:45  逆火狂飙  阅读(320)  评论(0编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东