如何向mysql数据库

时间:2016-08-23 08:39:19

标签: java mysql insert hashmap

在添加到数据库之前,应该检查数据。有三列项应该是唯一的。所以我创建了一个HashMapper(HashMap Map)来恢复数据库中已经存在的数据。

HashMap<String, Object> eauMap = new HashMap<String, Object>();

因此,数据库中存在一个select操作,我将三个不同的键用于映射同一个对象。

List<Object> existObjectList = Service.getAll();
        HashMap<String, Object> Map = new HashMap<String, Object>();
        for (Object existdata : existEauList) {
            Map.put(existdata.getip1(), existdata);
            Map.put(existdata.getip2(), existdata);
            Map.put(existdata.getip3(), existdata);
        }

然后我通过函数Map.get(key1),Map.get(key2),Map.get(key3)创建一个循环来检查添加数据的每一行。如果有null,我将数据放入列表,我也将它放入地图。

for loop:
  Object data = (Object) Map.get(ip1);//ip1 is from the cell value
    if (data == null) {
        data=(Object)Map.get(ip2);
        if(data==null){
              data=(Object)Map.get(ip3);
           if(data==null){
                 …………………………
                 Map.put(ip1,newdata);
                 Map.put(ip2,newdata);
                 Map.put(ip3,newdata);
                }
            }
     }

然后我将列表提交到数据库。 当只有300行数据时它可以工作。现在我添加10000,服务器故障。我该怎么做才能提高效率。 要求需要指出哪一行是重复的。该项目是由springmvc + spring + mybaits设置的

1 个答案:

答案 0 :(得分:0)

如果您需要向任何rdbms添加数千条记录,您应该使用rdbms提供的功能来导入数据。

在MySQL中,导入大量数据的功能称为load data infile

在目标表中,在需要唯一的字段上创建唯一索引或主键。在load data infile语句中指定ignore子句,以便在遇到重复条目时导入不会停止:

load data infile 'filename' ignore into table yourtable ...

更新

如果您需要识别重复记录,那么

  1. 创建一个与目标表结构相同的临时表。
  2. 使用load data infile语句将所有数据导入临时表。
  3. 在临时表和目标表之间使用带有select的简单inner join将为您提供目标表中已存在的记录。
  4. 使用insert ... select ... from temp_table left join target table on ... where target_table.identifier_column is null命令仅将临时表中的那些记录插入目标表中,而这些记录在taget表中不存在。在where条件中,如果3列的组合唯一地标识记录,则可能必须指定多于1列。
  5. 删除临时表。 (或者只是关闭数据库连接)