public void importIndexHistoryByCsv(String fileName) {
logger.info("开始获取Csv文件导入到数据库,csv文件名为:" + fileName);
File file = new File(fileName);
cnAbsHistoryDataService.importIndexHistoryByCsv(file); }
//指数历史数据导入
@Override
public void importIndexHistoryByCsv(File file) {
List<String> csvList = transCsvToList(file);
List<AbsSecurityEntity> absSecurityList = new ArrayList<AbsSecurityEntity>();
List<AbsSecuritySummaryEntity> summaryList = new ArrayList<AbsSecuritySummaryEntity>(); int j = 0;
int i = 0;
try {
List<AbsSecurityEntity> totalSecurityList = new ArrayList<>();
for (j = 0; j < csvList.size(); j++) {
String[] lineDate = csvList.get(j).split(",");
AbsSecurityEntity security = new AbsSecurityEntity();
AbsSecuritySummaryEntity summary = new AbsSecuritySummaryEntity();
i = -1;
security.setSecurityId(Long.valueOf(lineDate[++i]));
summary.setNoteId(Long.valueOf(lineDate[i]));
security.setSecurityCode(lineDate[++i]);
summary.setSecurityCode(lineDate[i]);
security.setSecurityName(lineDate[++i]);
summary.setSecurityName(lineDate[i]);
security.setTransferDate(DateUtil.isDate(lineDate[++i]));
summary.setTransferDate(DateUtil.isDate(lineDate[i])); summary.setPrice(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setYield(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setWal(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setBeginBalance(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setPrincipalPaid(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setInterestPaid(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
++i;
summary.setNotional(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
++i;
summary.setRating(lineDate[++i]);
absSecurityList.add(security);
summaryList.add(summary);
//300条批量导入
if (j == csvList.size() - 1 || absSecurityList.size() >= 300) {
totalSecurityList.addAll(absSecurityList);
if (totalSecurityList.size() > 2000) {
totalSecurityList = totalSecurityList.stream().sorted(Comparator.comparing(AbsSecurityEntity::getTransferDate)).collect(Collectors.toList());
totalSecurityList.subList(1, totalSecurityList.size() - 1000).clear();
} for (AbsSecurityEntity entity : absSecurityList) {
entity.setType("default");
}
absSecurityDao.batchAddAbsSecurity(absSecurityList);
absSecuritySummaryDao.batchAddAbsSecuritySummary(summaryList);
absSecurityList.clear();
summaryList.clear();
}
}
} catch (Exception e) {
logger.error("指数历史数据都 error :" + e);
throw new BizException("第: " + (j + 2) + "行 , : " + i + " 列,数据格式有误");
}
}
public static List<String> transCsvToList(File file) {
List<String> dataList = new ArrayList<String>();
BufferedReader br = null;
try {
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
br = new BufferedReader(new BufferedReader(isr));
// br = new BufferedReader(new FileReader(file));
String line = "";
while ((line = br.readLine()) != null) {
dataList.add(line);
}
} catch (Exception e) {
} finally {
if (br != null) {
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
List<String> subList = dataList.subList(1, dataList.size());
return subList;
}

批量数据的Excel导入的更多相关文章

  1. 10w行级别数据的Excel导入优化记录

    需求说明 项目中有一个 Excel 导入的需求:缴费记录导入 由实施 / 用户 将别的系统的数据填入我们系统中的 Excel 模板,应用将文件内容读取.校对.转换之后产生欠费数据.票据.票据详情并存储 ...

  2. 销售合同金额数据从Excel导入

    一.业务需求 1.新增了销售合同金额的字段,但是老数据没有这个字段:所以销售合同金额从销售合同附件的各品种金额之和. 2.制作好excel字段模板,将此模板发送给销售业务部门来统计并完成excel表格 ...

  3. 利用PL/SQL Developer工具导出数据到excel,导入excel数据到表

    使用PL/SQL Developer工具. 导出: 1.执行select 语句查询出需要导出的数据. 2.在数据列表中右键,选择save results.保存为.csv文件,然后已excel方式打开就 ...

  4. VBA: 怎样批量数据从Excel派出到Visio

    上周派到了个case, 是批量从Excel导出数据导Visio每个图形中. 花了些时间实现了这个功能. 原理如下: 打开Excel 新建/打开表单 指向所选择的表单 遍历所在列的所有数据 打开Visi ...

  5. SQL server 导入数据 (excel导入到SQL server数据库)

    打开数据库SQL server ,右键数据库,任务,导入数据 点击下一步 选择数据源类型 选择路径,点击下一步 选择将要生成的类型 选择登陆方式 选中,点击下一步 点击编辑映射可以修改将要生成的表,点 ...

  6. ABAP-2-会计凭证批量数据导入本地ACCESS

    ABAP-1-会计凭证批量数据导入本地ACCESS 上一版本出现问题: A.若TXT数据条目超过800万(大概1.3G),则将TXT导入ACCESS过程不成功,ACCESS数据表为空.(Access单 ...

  7. ABAP-1-会计凭证批量数据导入本地ACCESS

    公司会计凭证导入ACCESS数据库,需要发送给审计,原先的方案是采用DEPHI开发的功能(调用函数获取会计凭证信息,然后INSERT到ACCESS数据表),运行速度非常慢,业务方要求对该功能进行优化, ...

  8. 使用PHPExcel实现数据批量导出为excel表格

    首先需要下载PHPExecel类文件,帮助文档可以参考PHPExcel中文帮助手册|PHPExcel使用方法. 下面直接上例子,是我自己写的一个简单的批量导出数据为excel的例子 前台页面 比较简单 ...

  9. .net实现与excel的数据交互、导入导出

    应该说,一套成熟的基于web的管理系统,与用户做好的excel表格进行数据交互是一个不可或缺的功能,毕竟,一切以方便客(jin)户(qian)为宗旨. 本人之前从事PHP的开发工作,熟悉PHP的都应该 ...

随机推荐

  1. 万网域名查询API接口

    域名查询 接口地址:http://panda.www.net.cn/cgi-bin/check.cgi 接口采用HTTP,POST,GET协议 参数名称:area_domain 值为标准域名,例:nm ...

  2. 阿里云配置gitlab邮箱

    gitlab_rails['gitlab_email_from'] = 'username@163.com' user['git_user_email'] = "username@163.c ...

  3. 使用elasticsearch分页时报max_result_window is too large的错误解决方案

    使用elasticsearch进行深度分页查询时的size-from大于10000的时候,会提示一个max_result_window is too large的错误. 官方推荐是scroll查询返回 ...

  4. Java代码质量监控工具Sonar安装

    1.  代码质量七宗罪 Sonar是一个代码质量管理系统.它的帮助文档开篇明义,提出了代码质量的七宗罪.总结的比較到位.最好还是一看: 1.        Bug和隐藏Bug(Bugs and Pot ...

  5. 为什么虚拟 dom 会提高性能?

    虚拟 dom 相当于在 js 和真实 dom 中间加了一个缓存,利用 dom diff 算法避免了没有必要的 dom 操作,从而提高性能.用 JavaScript 对象结构表示 DOM 树的结构:然后 ...

  6. 单片机 MCU 中 stack 使用的探讨

    stack 的使用,是单片机开发中影响最大,但是最少被讨论的问题.而提及这个问题的地方,都是对这个问题含糊其辞. 今天花了点时间,使用最笨的办法,直接阅读汇编代码,来对这个问题就行探究,这里做一下记录 ...

  7. 大疆无人机M100相关问题解决过程

    1.遥控器升级问题 iOS端使用app升级,重复尝试了5次+,还是无法升级.卸载app重新安装,依旧是无法升级.使用Android app升级,一次搞定. 2.飞行器固件升级(云台别选错了) http ...

  8. selenium面试题总结

    2017年7月17日更新:已经更新部分答案 答案链接 今天有同学问到seleinum面试的时候会问到的问题,随便想了想,暂时纪录一下.欢迎大家在评论中提供更多问题. 去哪儿的面试题 selenium中 ...

  9. Java基础(四)线程快速了解

    开始整理线程之前,之前有个命令忘记整理了,先整理一下jar命令的使用 Jar包 其实可以理解是java的压缩包方便使用,只要在classpath设置jar路径即可数据库驱动,ssh框架等都是以jar包 ...

  10. 为Sublime Text 设置全局启动快捷键

    为Sublime Text创建快捷方式.找到Sublime Text安装目录中的“sublime_text.exe”文件,然后右击创建快捷方式,如下图:  为Sublime Tex设置全局快捷键.将上 ...