我在oracle表的列中插入行,我在DB上手动创建了列,列号名称和XML文件中的顺序。 XML被视为配置文件,因此用户可以根据业务需求管理列并更新它们。我的java代码读取XML文件,并从XML和Document(内容管理技术)API中提取列名。
我可以提取这些列的值并将行插入到DB表中。我很好,直到这里,因为我的查询在计时器上运行了三个小时,这个查询运行,由于这个我得到重复的值到数据库表 - 因为相同的旧查询运行和旧的结果被推入数据库。 / p>
我需要避免这种情况,如果有人可以帮助我,那就太好了。
代码:
String rObjectIdCheck = null;
pSelect = dbConn.prepareStatement("select r_object_id from financial_data");
ResultSet rsSelect = pSelect.executeQuery();
while(rsSelect.next()){
rObjectIdCheck =(String)rsSelect.getObject("r_object_id");
System.out.println("The OBJECTID from DB is:"+rObjectIdCheck);
System.out.println("The ObjectID from DCTM extract:"+rObjectID);
if (rObjectIdCheck!=rObjectID) {
pStmt = dbConn.prepareStatement("insert into financial_data ("+sbAttrName.toString()+")" + "values" +"("+sbAttrValue.toString()+")");
pStmt.addBatch();
pStmt.executeBatch();
}
}
sbAttrValue.delete(0, iSBValue);
sbAttrName.delete(0,iSBName);
}
答案 0 :(得分:0)
您的MERGE语法不正确。它应该看起来更像以下。您应该检查以确保输入正确的变量。
String query = "MERGE INTO financial_data a using dual ON(a.r_object_id="+rObjectID+")" +
"WHEN MATCHED THEN UPDATE SET "+sbAttrName.toString()+"="+sbAttrValue.toString()+
"WHEN NOT MATCHED THEN insert ("+sbAttrName.toString()+")" +
"values" +"("+sbAttrValue.toString()+")";
dbConn.prepareStatement(query);