所以这是我的问题。我有一个巨大的数据文本文件,我需要通过显然使用 java 程序将所有这些数据快速输入到 mySQL 数据库中。我唯一的问题是,数据是由某个 ID 标识的。其中一些 ID 具有重复项,并且包含与彼此相同的所有信息。为了排序和清晰起见,我想删除所有这些。
解决此问题的最佳方法是什么?如果有人可以提供帮助,我将不胜感激!
谢谢。
所以这是我的问题。我有一个巨大的数据文本文件,我需要通过显然使用 java 程序将所有这些数据快速输入到 mySQL 数据库中。我唯一的问题是,数据是由某个 ID 标识的。其中一些 ID 具有重复项,并且包含与彼此相同的所有信息。为了排序和清晰起见,我想删除所有这些。
解决此问题的最佳方法是什么?如果有人可以提供帮助,我将不胜感激!
谢谢。
在读取数据时有一个 hashmap 或 hashset。检查 id 是否存在于 hasmap/hashset 中,如果存在则继续。否则输入 set/map 并插入。
顺便说一句: hashmap 和 hashset 之间的区别在于 hashset 只接受值,而 hashmap 接受键值。但是,Hashset 本身在内存中使用了一个 hashmap,并且只是为值插入了一个虚拟对象。 请参阅:HashMap 和 Hashtable 之间的区别?
哈希集示例:
HashSet<Integer> distinctIds = new HashSet<Integer>();
MyRowData rowdata;
int rowID;
while((rowdata = this.getRowData())!=null ) // or however you iterate over the rows using reader etc
{
rowID = rowdata.getRowID();
if(!distinctIds.contains(new Integer(rowID)))
{
distinctIds.add(rowID);
inertDataInMysql(rowdata); //however you insert your data here
System.out.println("Adding " + rowID);
}
}
您可以通过对多行执行可交换插入来使用批量插入来进一步加快代码速度。看:
将数据添加到数据库时,只需在您的 ID 中添加一个主键。这样,重复的 ID 行将不会添加到您的数据库中。希望这可以帮助。