我有一个java程序,它逐行读取csv文件,并使用DB2提供的Merge语句在表中执行MERGE。
例如,如果我在CSV中有1000行,则会运行executeUpdate 1000次。
我的挑战是我每小时运行一次这样的脚本,因此有可能新的条目会进入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 :(得分:0)
尝试在查询中添加when not matched子句。
实施例。什么时候不匹配 那么删除
如果您的CSV文件包含的数据与数据库中的数据不匹配,则应删除该行。
请查看此链接以获取更多信息。