本人因项目需要,现在需要做一个定时任务把项目中某个路径的txt文本用sqlload读取
存入oracle,哪位大佬有实例贴出来看一下,在此谢过!!!
java中调用sqlload读取txt文本存入oracle
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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的官方文档。
解决 无用评论 打赏 举报