使用MERGE语句将表B的数据合并到表A中

使用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();
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值