excel导入数据查重问题

找了好久,没有找到想要的答案。
只好自己摸索,我的方法是同事务那样,
获得connection后取消自动提交,然后循环一个个select查重。
正好本就需要一个循环将excel表中不能重复的字段查重,
也需要将不合格的数据剔除,最后获得一个有效数据集,然后批量插入。


public Map<String, String> insertCompany(List<List<Object>> list) throws SQLException {
		//存放合格数据,待插入数据库
		List<Company> companys = new ArrayList<Company>();
		//存放结果,及 不合格的数据 反馈,,想要弄得好一点可以弄个dto层(数据传输对象层)专门方便service到servlet/ctrl的数据传输
		Map<String, String> dataMap = new HashMap<String, String>();
		//存放上传的excel中得单位名称用以excel查重
		Set<String> names = new HashSet<String>();
		String data = "";
		
		Connection conn = BaseDao.getConn();
		conn.setAutoCommit(false);
		
		for (int i = 0; i < list.size(); i++) {
			List<Object> e = list.get(i);
			try {
				String id = UUID.randomUUID().toString();
				String name = (String) e.get(0);
				if (names.contains(name)) {
					data += ("第" + (i+2) + "条,excel中的重复数据!<br>");
					//excel序号1开始,第一行为表头,故+2
					continue;
				}
				names.add(name);
				if (this.isExist(name, conn)) {
					data += ("第" + (i+2) + "条, 系统中已存在该数据!<br>");
					continue;
				}
				int type = Integer.parseInt((String) e.get(1));
				// 看需求,excel表中类型可否直接填数值
				// 要求填中文类型的话从数据库读取List<> --> Map 根据键值判断
				String address = (String) e.get(2);
				String direction = (String) e.get(3);
				String webUrl = (String) e.get(4);
				String info = (String) e.get(5);
				Company com = new Company(id, name, type, address, direction,
						webUrl, info);
				companys.add(com);//将合格数据存放至List
			} catch (Exception exception) {
				data += ("第" + (i+2) + "条,数据格式有误!<br>");
			}
		}
		conn.commit();//提交事务
		conn.setAutoCommit(true);
		BaseDao.releaseAll(null, null, conn);
		//无合格数据
		if (companys.size() == 0) {
			data = "无有效数据!" + data;
		}
		//批量插入
		int res = companyDao.insert(companys);
		
		String resStr = "success";
		if (res <= 0) {
			resStr = "fail";
		}
		//反馈信息
		dataMap.put("data", data);
		dataMap.put("result", resStr);
		return dataMap;
	}

2017.7.25更新


猜你喜欢

转载自blog.csdn.net/qq_36326947/article/details/75570948
今日推荐