2015-03-30 62 views
0

我有一個java程序,它可以逐行讀取csv文件,並使用DB2提供的Merge語句在表中執行MERGE。將值合併到Java表

例如,如果我在CSV中有1000行,它將運行1000次executeUpdate。

我的挑戰是,我運行該腳本每隔一小時,以便有一種可能性,即新的條目將進入CSV文件或值將得到更新或行可能會被刪除(有時該行將在今後再來)

我想我做插入如果不存在和更新,如果存在部分正確,但我不知道如何刪除部分插入過去,但不再在最新的csv文件中的行?

另外什麼是這裏避免做1000插入語句的理想情況是否我使用準備好的語句?有人能給我一個例子嗎?

String sql_merge = " MERGE INTO IM4BMX.IEMCOMPUTER_DETAILS AS A USING (VALUES ('"+ComputerID+"', '"+Environment+"')) AS A_TMP (ComputerID , Environment) ON A.ComputerID = A_TMP.ComputerID WHEN MATCHED THEN UPDATE SET ComputerID = '"+ComputerID+"', Environment = '"+Environment+"' WHEN NOT MATCHED THEN INSERT (ComputerID , Environment) VALUES (A_TMP.ComputerID, A_TMP.Environment) ELSE IGNORE ";    

stmt.executeUpdate(sql_merge); 
+0

如果您的CSV文件是該表中的數據的權威來源,爲什麼你不能簡單地截斷/在CSV文件中的數據加載表的內容? – 2015-03-31 20:56:31

+0

@IanBjorhovde如何使用我的Java程序將csv文件導入db2表? – user3846091 2015-04-01 02:40:40

回答

0

嘗試在查詢中添加一個when not matched子句。

Ex。未匹配時 然後刪除

如果CSV文件包含的數據與數據庫中的數據不匹配,則應刪除該行。

看看這個鏈接的進一步信息。

Merge Statement Explained