使用java导入mysql时,跳过数据中的重复行

时间:2015-11-18 21:15:12

标签: java mysql mysqli jdbc duplicates

我在csv文件中有超过100k行,我必须导入到mysql数据库,该文件包含超过10000个重复项,我必须在导入时跳过,并且我使用ID作为主键及其自动增量,所以我可以&# 39;在mysql中使用ignore数据类型。

列是: " id"," ICD10Code"," ICD10Desc"," SNOMED"," SNOMEDSNOMEDDesc"

id是主键 其余4列有重复值

oCon = DBConnection.getConnection();
strSql = "Insert into batch (ICD10Code, ICD10Desc, SNOMED,SNOMEDDesc) values (?,?,?,?)";
oPrStmt = oCon.prepareStatement(strSql);
oReader = new BufferedReader(new FileReader(strFileName));

2 个答案:

答案 0 :(得分:1)

只有100k行数据,您应该能够跟踪内存中的文件内容。所以,您可以执行以下操作:

  • 创建HashSet<String> uniqueRows,您可以在其中存储已处理的{ICD10Code, ICD10Desc, SNOMED, SNOMEDDesc}的唯一组合。
  • 对于从CSV中读取的每一行,将{ICD10Code, ICD10Desc, SNOMED, SNOMEDDesc}的值连接到String rowString并检查uniqueRows.contains(rowString)的值。
    • 如果该行已在Set中,请跳过
    • 如果该行不在该集合中,INSERT将其放入数据库并将其添加到Set

答案 1 :(得分:0)

如果有一个列的子集必须是唯一的,您可以在它们上定义一个唯一索引,这将允许您使用IGNORE。