使用MERGE语句将表B的数据合并到表A中:
如果AB主键相同 A.id = B.id ,则把B数据更新到A表中;
如果AB主键不等,则把B数据插入到A表中;【也就是说:B表主键在A表中不存在的意思;】
/*
* 第一步:删除临时表数据;
* 第二步:插入获取接口数据;
* 第三步:更新或插入;
*/
public static void delInstMergeBankNums(Connection conn,List<BankNum> bankNumLists) throws Exception {
PreparedStatement st = conn.prepareStatement("delete from fa_base_banknum_ini t ");
PreparedStatement st2 = conn.prepareStatement("insert into fa_base_banknum_ini (BANKNAME,INTERBANKNUM,BANKSTATUS,UPDATETIME,SYZT,BANKTYPE) values (?,?,?,?,?,?)");
//BANKNAME,INTERBANKNUM,BANKSTATUS,UPDATETIME,SYZT,BANKTYPE
//使用MERGE语句将表B的数据合并到表A中:
PreparedStatement st3 = conn.prepareStatement("MERGE INTO fa_base_banknum a USING fa_base_banknum_ini b ON (a.INTERBANKNUM = b.INTERBANKNUM) "
//如果主键相同,则更新表A的data列
+ " WHEN MATCHED THEN UPDATE SET a.BANKNAME = b.BANKNAME,a.BANKSTATUS=b.BANKSTATUS,a.UPDATETIME=b.UPDATETIME,a.SYZT=b.SYZT,a.BANKTYPE=b.BANKTYPE "
//如果主键不同,则插入表B的数据到表A
+ " WHEN NOT MATCHED THEN INSERT (BANKNAME,INTERBANKNUM,BANKSTATUS,UPDATETIME,SYZT,BANKTYPE) VALUES (b.BANKNAME,b.INTERBANKNUM,b.BANKSTATUS,b.UPDATETIME,b.SYZT,b.BANKTYPE)");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (BankNum b : bankNumLists) {
st2.setString(1, b.getBankName().trim());
st2.setString(2, b.getInterBankNum().trim());
st2.setString(3, b.getBankStatus().trim());
//SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
//System.out.println("string:"+sDate);
Date stDate=format.parse(b.getUpdateTime().trim());
//System.out.println("util.Date:"+stDate);
//java.sql.Date startDate=new java.sql.Date(stDate.getTime());
//Date utilDate = new Date();//util utilDate
//System.out.println("utilDate : " + utilDate);
Timestamp sqlDate = new Timestamp(stDate.getTime());//uilt date转sql date
//System.out.println("sqlDate : " + sqlDate);
st2.setTimestamp(4, sqlDate);
st2.setString(5, b.getSyzt().trim());
st2.setString(6, b.getBankType().trim());
st2.addBatch();
}
int result = st.executeUpdate();
int[] result2 = st2.executeBatch();
int result3 = st3.executeUpdate();
conn.commit();
System.out.println("1、删除中间表:" + result + "条;");
System.out.println("2、插入中间表:" + result2.length + "条;");
System.out.println("3、更新表:" + result3 + "条;");
st.close();
st2.close();
st3.close();
}