aslong_456 2017-12-07 01:48 采纳率: 0%
浏览 1282

java中调用sqlload读取txt文本存入oracle

本人因项目需要,现在需要做一个定时任务把项目中某个路径的txt文本用sqlload读取
存入oracle,哪位大佬有实例贴出来看一下,在此谢过!!!

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-16 09:50
    关注

    参考GPT和自己的思路:

    可以使用Java的ProcessBuilder类来调用sqlload命令,并读取需要插入的txt文本,最后将数据插入到Oracle中。下面是示例代码:

    String path = "/path/to/txt/file"; // txt文件路径
    String tableName = "table_name"; // 要插入的表名
    String oracleUser = "oracle_username"; // Oracle数据库用户名
    String oraclePass = "oracle_password"; // Oracle数据库密码
    
    // 构建sqlload命令和参数
    List<String> command = new ArrayList<String>();
    command.add("sqlldr");
    command.add(oracleUser + "/" + oraclePass + "@" + // 连接字符串
            "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))");
    command.add("data=" + path); // 数据文件路径
    command.add("control=" + "/path/to/control/file"); // 控制文件路径
    command.add("log=" + "/path/to/log/file"); // 日志文件路径
    command.add("bad=" + "/path/to/bad/file"); // 错误文件路径
    command.add("discard=" + "/path/to/discard/file"); // 废弃文件路径
    command.add("skip=" + "1"); // 跳过行数
    command.add("rows=" + "10000"); // 批量插入行数
    command.add("errors=" + "50"); // 允许的错误数
    command.add("DIRECT=TRUE"); // 直接路径加载方式
    command.add(tableName); // 数据库表名
    
    // 创建进程并执行sqlload命令
    ProcessBuilder pb = new ProcessBuilder(command);
    pb.redirectErrorStream(true); // 将错误输出到日志中
    Process p = pb.start();
    InputStream in = p.getInputStream();
    Reader reader = new InputStreamReader(in);
    BufferedReader br = new BufferedReader(reader);
    String line;
    while ((line = br.readLine()) != null) {
        // 输出sqlload执行日志
        System.out.println(line);
    }
    p.waitFor(); // 等待sqlload执行完毕
    if (p.exitValue() == 0) {
        // 执行成功
        System.out.println("数据插入成功!");
    } else {
        // 执行失败
        System.err.println("数据插入失败!");
    }
    

    需要注意的是,此示例使用了本地的Oracle数据库,需要根据实际情况修改连接字符串。另外,数据文件和控制文件的格式需要和Oracle数据库表的结构对应,否则会发生错误。详细可以参考sqlloader的官方文档。

    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突