开发者社区> 问答> 正文

JDBC PreparedStatement批量插入,使用on duplicate key update去重?

现在遇到一个问题,在做数据库同步的时候,想使用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),因为第二种执行效率太慢

展开
收起
一梦灬红尘 2018-07-26 09:51:51 8242 0
1 条回答
写回答
取消 提交回答
  • Experienced Information Technology Technical Manager with a demonstrated history of working in the human resources industry. Strong informat

    如何主键重复,可以使用忽略错误的方式插入,效率很高,就看你的需求了

    2019-07-17 22:58:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spark SQL: Past, Present and Future 立即下载
Spark SQL:Past Present &Future 立即下载
Comparison of Spark SQL with H 立即下载