2013-04-12 150 views
1

所以這是我的問題。我有一個巨大的數據文本文件,我需要通過顯然使用Java程序將所有這些數據快速輸入到mySQL數據庫中。我唯一的問題是,數據由特定的ID標識。其中一些ID具有重複項,並且包含與彼此相同的所有信息。爲了排序和清晰起見,我想刪除所有這些。根據列中的重複項從數據中刪除整行

什麼是最好的方式去做這件事?如果有人能幫助我會很感激!

謝謝。

+0

嗨,注意到沒有答案被接受:) –

回答

6

在讀取數據時有一個hashmap或hashset。檢查該標識是否存在於hasmap/hashset中,如果繼續。否則輸入set/map並插入。

另外: 哈希映射和哈希集之間的區別是哈希集只需要值,而哈希映射需要關鍵值。然而,Hashset本身在內存中使用了一個HashMap,併爲值插入一個虛擬對象。 請參閱:用一個HashSet Differences between HashMap and 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); 
    } 
    } 

您可以使用批量插入通過執行可交換插入許多行進一步加快你的代碼。請參閱:

+0

相當信息,非常好的答案:) –

0

將數據存入數據庫時​​,只需添加一個主鍵,以您的ID。這樣,重複的ID行將不會被添加到您的數據庫。希望這可以幫助。

+0

該ID已被設置爲主鍵。我試圖在將數據放入數據庫之前將所有數據與刪除的重複數據進行排序。以前的hashmap建議仍然是最好的想法,或者你會建議其他的東西嗎? – Requiem

+0

添加主鍵意味着他仍然會將冗餘數據發送到數據庫並在服務器和客戶端上使用資源(網絡+ cpu)。 –

相關問題