我正在解决一个问题,我第一次想要上传 Excel文件,请阅读它&存储到MySQL数据库中。我完成了这部分&一切都按预期工作。
每当我再次上传 Excel文件时,第二次形成表格(Excel文件可以与数据库具有完全相同的数据或修改现有数据,或者修改现有数据和新添加的数据),我要将它与MySQL和MySQL中的数据进行比较。确定变化。
我正在使用 Apache POI 库&amp; amp;读取Excel文件。将其存储在Map<Integer, List<MyCell>
中,其中键是行号&amp;它的值为List<MyCell>
,基本上是列列表。
我能够识别新添加的记录(新添加的密钥及其值
a Map
)这个逻辑
Map<Integer, List<MyCell>> filteredMap = new HashMap<>();
for (Integer key : datafromExcel.keySet()) {
if (datafromDB.containsKey(key)) {
datafromDB.remove(key);
} else {
filteredMap.put(key, datafromExcel.get(key));
}
}
但我没有成功找到现有的修改记录(地图中现有修改后的相同键值)
我怎么能得到这个?
答案 0 :(得分:0)
要检查修改后的值,您必须将来自DB和excel的列表与相应的键进行比较。 就像我在这里展示列表的比较一样:
Collection<String> similar = new HashSet<String>( fromDB.get(key) );
Collection<String> different = new HashSet<String>();
different.addAll( fromDB.get(key) );
different.addAll( fromExcel.get(key) );
similar.retainAll( fromExcel.get(key) );
different.removeAll( similar );
if(different.size()>0){
SOP("NO CHANGE");
}
根据你的逻辑修改如果MyCell(我在这里使用过String)是一个类,你可以使用比较器。
希望这会有所帮助
答案 1 :(得分:0)
对于数据库中存在的密钥,您调用的是datafromDB.remove(key);
。
所以你立即找到修改后的记录,删除它并且不再知道你有这样的记录。显然,您必须执行超过datafromDB.remove(key);
的操作,或者根本不删除密钥数据。