2011-12-14 96 views
0

我想從文本文件加載數據到數據庫,如果數據已經存在,我需要在加載時轉義該數據。通過消除重複從文本文件加載數據到mysql數據庫

我正在使用下面的查詢來將數據從文本文件加載到mysql數據庫。

「LOAD DATA INFILE 'F:/wbrdata.txt' 成 任選被封閉表wbrdatatable 字段由終止 '' 「」,由終止 線 '\ r \ N' 忽略1線(信道,時間,pulserate,dwellid,targetid);「

它將數據追加到現有的表數據。我想在加載到數據庫時避免表&文件中已存在(重複)的公共數據。

我該如何做到這一點? 謝謝

問候 桑卡爾

+0

你用什麼程序來加載文本文件到mysql – BizApps

+0

在java中我寫的程序來執行上述查詢。 – sankar

+0

我正在使用簡單的JDBC程序來加載執行此查詢字符串str =「將數據infile'F://Hello.txt'加載到表中由'',''選擇性封閉的newwbrtable字段可能由\」\「括起來的行由'\ r \ n'忽略1行(時間,頻道1,頻道2);「; Class.forName(driverclass).newInstance(); con = DriverManager.getConnection(jdbcURL,user,password); st = con.createStatement(); – sankar

回答

1

嘗試文本文件加載到臨時表(相同目標表),然後從臨時表刪除重複,其餘複製到目標表。


示例(假設wbrdatatable_temp是從文本文件的所有數據的臨時表):

CREATE TABLE wbrdatatable(
    id INT(11) NOT NULL AUTO_INCREMENT, 
    column1 VARCHAR(255) DEFAULT NULL, 
    PRIMARY KEY (id) 
); 

INSERT INTO wbrdatatable VALUES 
    (1, '111'), 
    (2, '222'), 
    (3, '333'), 
    (4, '444'), 
    (5, '555'); 

CREATE TABLE wbrdatatable_temp(
    id INT(11) NOT NULL AUTO_INCREMENT, 
    column1 VARCHAR(255) DEFAULT NULL, 
    PRIMARY KEY (id) 
); 

INSERT INTO wbrdatatable_temp VALUES 
    (1, '111'), 
    (2, '222'), 
    (10, '100'), -- new record that should be added 
    (11, '200'); -- new record that should be added 

-- Copy only new records! 
INSERT INTO wbrdatatable 
SELECT t1.* FROM wbrdatatable_temp t1 
    LEFT JOIN wbrdatatable t2 
    ON t1.id = t2.id AND t1.column1 = t2.column1 
WHERE t2.id IS NULL; 

-- Test result 
SELECT * FROM wbrdatatable; 
+----+---------+ 
| id | column1 | 
+----+---------+ 
| 1 | 111  | 
| 2 | 222  | 
| 3 | 333  | 
| 4 | 444  | 
| 5 | 555  | 
| 10 | 100  | -- only new record is added 
| 11 | 200  | -- only new record is added 
+----+---------+ 
+0

我想你沒有得到我的問題。在將數據從文本文件加載到數據庫時,如果表中存在相同的數據,那麼我將跳過該數據,剩下的我必須加載到表中。 – sankar

+0

我建議您將所有數據加載到另一個表中,然後刪除重複項並添加記錄。你甚至可以使用一個查詢來刪除/添加,我會在我的答案中添加一個例子。 – Devart

+0

非常感謝。這對我有用。但它使用額外的內存用於相同的數據(臨時表),是不是會對大型數據庫文件造成任何問題?在此之前,我們不能使用一些具有條件的子查詢以及我的查詢(將文件加載到數據庫中)來轉義現有數據。請不要爲我的這種類型的問題。再次感謝你...... – sankar

0

試試這個邏輯。

1. Upload Text File Data 
    2. Check record using select statement on your database 

    if(recordexist==true) 
      save 
    else 
      not save 

問候

+0

感謝您的回覆。你的意思是,在完成從文件到數據庫的加載數據後,我必須過濾所有重複對象,對吧?我們不能通過使用子查詢加載到數據庫時消除重複項。如果你知道可以發送該語法,請...... – sankar

相關問題