• MySQL——ON DUPLICATE KEY UPDATE添加索引值实现重复插入变更update


        1. INSERT INTO tablename(field1,field2, field3, ...) VALUES(value1, value2, value3, ...) ON DUPLICATE KEY UPDATE field1=value1,field2=value2, field3=value3, ...;

    INSERT INTO f_cameras (cameraname,cameraIndexCode) VALUES (?,?) ON DUPLICATE KEY UPDATE 
    cameraIndexCode= VALUES(cameraIndexCode),camername= VALUES(cameraname)

    public void insertRegionList(List<Region> regionInfoData){
    Log4JConfigureServlet.LOGINFO.info("insertRegionList start");
    Log4JConfigureServlet.LOGINFO.info("regionInfoData.size()=" + regionInfoData.size());
    List<Region> factoryList = new ArrayList<>();
    List<Region> areaList = new ArrayList<>();
    for (Region cc : regionInfoData){
    if(cc.getParentIndexCode().equals("root000000")){
    factoryList.add(cc);
    }else if(!cc.getParentIndexCode().equals("-1")){
    areaList.add(cc);
    }
    }
    Log4JConfigureServlet.LOGINFO.info("factoryList==="+ JSON.toJSONString(factoryList));
    Log4JConfigureServlet.LOGINFO.info("areaList===" + JSON.toJSONString(areaList));
    Connection conn = null;
    PreparedStatement pst = null;
    PreparedStatement pst2 = null;
    ResultSet rs = null;
    try {
    conn = DbUtil.getConnection();
    if(conn!=null) {
    conn.setAutoCommit(false);// 更改JDBC事务的默认提交方式
    //cameraIndexCode设置为Unique索引
    String sql = "INSERT INTO f_factory (factoryid,factory) " +
    "VALUES (?,?) " +
    "ON DUPLICATE KEY UPDATE " +
    "factoryid= VALUES(factoryid)," +
    "factory=VALUES(factory)";

    String sql2 = "INSERT INTO f_areas (areaid,areaname,factoryid) " +
    "VALUES (?,?,?) " +
    "ON DUPLICATE KEY UPDATE " +
    "areaid= VALUES(areaid)," +
    "areaname=VALUES(areaname)," +
    "factoryid=VALUES(factoryid)";

    pst = (PreparedStatement) conn.prepareStatement(sql);
    pst2 = (PreparedStatement) conn.prepareStatement(sql2);
    Log4JConfigureServlet.LOGINFO.info("insertRegionList conn.prepareStatement(sql)");
    for (Region cc:factoryList) {
    pst.setString(1, cc.getIndexCode());
    pst.setString(2, cc.getName());
    pst.addBatch();
    Log4JConfigureServlet.LOGINFO.info("insertRegionList pst.addBatch()");
    }
    for (Region cc:areaList){
    pst2.setString(1, cc.getIndexCode());
    pst2.setString(2, cc.getName());
    pst2.setString(3, cc.getParentIndexCode());
    pst2.addBatch();
    Log4JConfigureServlet.LOGINFO.info("insertRegionList pst2.addBatch()");
    }
    pst.executeBatch();
    pst2.executeBatch();
    Log4JConfigureServlet.LOGINFO.info("insertRegionList pst.executeBatch()");
    conn.commit();
    conn.setAutoCommit(true);
    Log4JConfigureServlet.LOGINFO.info("insertRegionList end");
    }

    } catch (Exception e) {
    try {
    if(conn!=null)
    conn.rollback();
    } catch (SQLException ex) {
    ex.printStackTrace();
    }
    String error = e.getCause().getLocalizedMessage();
    if (error == null) {
    error = e.getCause().toString();
    }
    Log4JConfigureServlet.LOGINFO.info("操作数据库失败错误为 is " + error);
    } finally {
    DbUtil.close(rs, pst, conn);
    }
    }


    springboot mapper.xml写法:
    insert into f_cameras (cameraname, cameraIndexCode)
        values (#{cameraname,jdbcType=VARCHAR}, #{cameraIndexCode,jdbcType=VARCHAR})
        ON DUPLICATE KEY UPDATE
        cameraname=#{cameraa,jdbcType=VARCHAR},carNum=#{cameraIndexCode,jdbcType=INTEGER}, optTime=CURRENT_TIMESTAMP

    2.新建Unique索引
    当Unique索引栏位的原始值和插入值一样时,执行update。反之,执行insert
    
    

     




  • 相关阅读:
    libgdx的环境搭建2022版 浮云
    MAC 升级npm版本
    网站测试工具
    Win7系统下安装IIS
    测试中的"黑天鹅"
    虚拟机的三种连接方式
    MySQL show create table
    蓝屏死机判断
    javascript 字符串处理全攻略
    WPF入门介绍 1
  • 原文地址:https://www.cnblogs.com/nana-qiu/p/12009197.html
Copyright © 2020-2023  润新知