赞
踩
有一张中间表,用于定时同步远程接口数据,比如每天凌晨从接口拿到数据并写入到中间表。
插入方法有2种:
(1)每次执行前删除中间表全部数据,然后从接口拿数据直接插入。
(2)执行前不对中间表操作,拿到接口数据后遍历数据,当该数据已存在数据库中就根据id更新字段,不存在那么插入到数据库。
第一种方法:正常情况下id都会设置为int类型自增长,那么删除数据后id并不会重置,那么频繁删除和插入大量数据就会导致id最终用完。int类型最大值是4294967295,对于一个频繁插入删除数据的表来说,是可能会被用完的。
如果非要采用这种方法,那么就需要手动插入id,但是要取消id的自增长,否则会报错,或者代码中插入前执行SET IDENTITY_INSERT 你的表名 ON;
,例如下面java代码
recordset.executeUpdate("SET IDENTITY_INSERT 你的表名 ON;" +
"insert into 你的表名(id,name) values(?,?);" +
"SET IDENTITY_INSERT 你的表名 OFF;",
i,"");
第二种方法:这种方法是比较推荐的。 因为第一种方法的删除本身就是一个敏感操作,我们原则上要尽量不做删除,只做更新。
这种方法需要考虑一点,就是如果接口数据没有该记录,而中间表中有该记录,那么是否要删除中间表的这条记录呢。根据业务情况来定,但是正常业务情况下不会删除。例如接口返回的是公司的人员数据,那么只需要设置人员的离职状态即可,正常情况下接口那边是不会直接删除人员的。因为我们只做更新,将人员的状态更新为接口的离职就可以了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。