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

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

参考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的官方文档。