zoukankan      html  css  js  c++  java
  • 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
    
    

     




  • 相关阅读:
    反射
    如何通过反射调用对象的方法?
    简述一下面向对象的”六原则一法则”。
    用Java写一个单例类。
    什么是UML?
    UML中有哪些常用的图?
    用Java写一个折半查找。
    两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
    构造器(constructor)是否可被重写(override)?
    用最有效率的方法计算2乘以8?
  • 原文地址:https://www.cnblogs.com/nana-qiu/p/12009197.html
Copyright © 2011-2022 走看看