• 【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

  • 相关阅读:
    Asp.Net 获取客户端真实IP方法总结
    C# 中英文符号互转(半角全角互转)
    执行git commit命令提示: “Please tell me who you are”的解决方案
    Tools
    VSC
    DevOps
    VSC
    DevOps
    DevOps
    K8S
  • 原文地址:https://www.cnblogs.com/heyang78/p/16033372.html
Copyright © 2020-2023  润新知