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设置的
答案 0 :(得分:0)
如果您需要向任何rdbms添加数千条记录,您应该使用rdbms提供的功能来导入数据。
在MySQL中,导入大量数据的功能称为load data infile。
在目标表中,在需要唯一的字段上创建唯一索引或主键。在load data infile
语句中指定ignore
子句,以便在遇到重复条目时导入不会停止:
load data infile 'filename' ignore into table yourtable ...
更新
如果您需要识别重复记录,那么
load data infile
语句将所有数据导入临时表。select
的简单inner join
将为您提供目标表中已存在的记录。insert ... select ... from temp_table left join target table on ... where target_table.identifier_column is null
命令仅将临时表中的那些记录插入目标表中,而这些记录在taget表中不存在。在where条件中,如果3列的组合唯一地标识记录,则可能必须指定多于1列。