现在遇到一个问题,在做数据库同步的时候,想使用PreparedStatement的addBatch()进行预编译批量插入多条记录,但是需要插入的数据如果重复了那就使用on duplicate key update。
查到了多条插入的时候应该是
insert into tableName(a,b,c) values(1,2,3),(11,22,33) on duplicate key update a = values(a),b=values(b),c=values(c)
现在的问题是结合PreparedStatement怎么拼接呢?因为on duplicate key update只能在语句结尾。但是参数需要循环设置。
提供下面几种方法请绕路,假设我描述的不对,也欢迎纠正
第一种办法:先拼接好多行插入的sql 并添加上on duplicate key update ,然后执行。这种可能会存在 字符串过长问题。
String inserSql= "insert into tableName(a,b,c) values(1,2,3),(11,22,33) on duplicate key update a = values(a),b=values(b),c=values(c)"
;
PreparedStatement pstmt_insert = connTarget.prepareStatement(inserSql);
pstmt_insert.executeUpdate();
第二种:replace into....,因为多列唯一索引可能存在隐患
第三种:不使用addBatch();使用addBatch(String sql),因为第二种执行效率太慢
如何主键重复,可以使用忽略错误的方式插入,效率很高,就看你的需求了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。