首页>代码>Java调用SqlLoader将大文本数据导入数据库>/SqlLoader/src/main/java/com/sun/sqlloader/api/impl/SqlLoaderImpl.java
package com.sun.sqlloader.api.impl; import java.io.BufferedReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.Date; import org.apache.log4j.Logger; import org.springframework.stereotype.Service; import com.sun.sqlloader.api.ISqlLoader; /** * SqlLoader接口实现 * @ClassName: SqlLoaderImpl * @author sunt * @date 2017年11月15日 * @version V1.0 */ @Service public class SqlLoaderImpl implements ISqlLoader{ private Logger logger = Logger.getLogger(SqlLoaderImpl.class); @Override public void ctlFileWriter(String fileRoute, String fileName, String tableName, String fieldName,String ctlfileName) { FileWriter fw = null; String strctl = "OPTIONS (skip=0)" + // 0是从第一行开始 1是 从第二行 " LOAD DATA CHARACTERSET AL32UTF8 INFILE '"+fileRoute+""+fileName+"'" + //设置字符集编码SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET'; " APPEND INTO TABLE "+tableName+"" + ////覆盖写入 " FIELDS TERMINATED BY '\\|'" + //数据中每行记录用","分隔 ,TERMINATED用于控制字段的分隔符,可以为多个字符。|需要转译 " OPTIONALLY ENCLOSED BY \"'\"" + //源文件有引号 '',这里去掉 ''''" " TRAILING NULLCOLS "+fieldName+""; //表的字段没有对应的值时允许为空 源数据没有对应,写入null try { fw = new FileWriter(fileRoute + "" + ctlfileName); fw.write(strctl); } catch (IOException e) { e.printStackTrace(); } finally { try { fw.flush(); fw.close(); } catch (IOException e) { logger.error("生成控制器文件异常..."); e.printStackTrace(); } } } @Override public void Executive(String user, String pwd, String database, String fileRoute, String ctlfileName,String logfileName) { InputStream ins = null; //要执行的DOS命令 --数据库 用户名 密码 user/password@database String dos="sqlldr "+user+"/"+pwd+"@"+database+" control="+fileRoute+""+ctlfileName+" log="+fileRoute+""+logfileName; logger.info("执行的dos命令:" + dos); String[] cmd = new String[] { "cmd.exe", "/C", dos }; // 命令cmd /c dir:是执行完dir命令后关闭命令窗口cmd /k dir:是执行完dir命令后不关闭命令窗口。 try { Process process = Runtime.getRuntime().exec(cmd); ins = process.getInputStream(); // 获取执行cmd命令后的信息 BufferedReader reader = new BufferedReader(new InputStreamReader(ins,Charset.forName("GBK")));//解决dos下中文输出乱码 String line = null; long startTime = new Date().getTime(); while ((line = reader.readLine()) != null) { logger.info("调用dos执行的结果==========>" + line); // 输出 } int exitValue = process.waitFor(); if (exitValue == 0) { logger.info("返回值:" + exitValue + "\n数据导入成功"); logger.info("总共耗时:" + (new Date().getTime() - startTime) / 1000 + "秒"); } else { logger.info("返回值:" + exitValue + "\n数据导入失败"); } process.getOutputStream().close(); // 关闭 } catch (Exception e) { e.printStackTrace(); } } }
最近下载更多
wangdengzhe LV7
2022年12月14日
zw050256 LV7
2022年11月10日
912727849 LV3
2021年3月19日
newhaijun LV15
2020年12月29日
xingQAQ LV7
2020年12月10日
adongliu666 LV4
2020年11月20日
玄狼之印 LV1
2020年8月18日
teslamask LV1
2020年7月11日
yxx_yxx LV11
2020年5月21日
sungaga LV15
2020年3月11日
最近浏览更多
胡明杨
2023年5月4日
暂无贡献等级
夜起星河 LV8
2023年3月9日
wangdengzhe LV7
2022年12月14日
zw050256 LV7
2022年11月10日
微信网友_6040315240812544 LV8
2022年11月3日
wangjie49 LV7
2022年10月18日
Zeorwyc LV8
2022年4月21日
3199625134 LV10
2022年4月15日
555151 LV3
2022年3月24日
329512801 LV28
2022年1月18日