1. 程式人生 > 其它 >批量複製表資料

批量複製表資料

技術標籤:JavaJavaWeb南鋼

背景:公司想設計一個功能,根據年月的不同,批次複製資料,例如202101月的資料複製到202102月

注意:年月或者要修改的最好是多個主鍵裡面的一個,不然會出現主鍵重複

實現步驟和思路

  1. 首先根據TABLEID,獲取維護在一張表裡面的表明和要修改的欄位

  2. 根據邏輯獲取表名和要改欄位名

  3. 每次獲取一個表名,然後獲取表明每一列的欄位名,存放到map裡面

    Map map = DAO.getColName(tableName,yyyymmCol, yyyymml);
    //tableName:表名
    //yyyymmCol:要修改的表名欄位
    //yyyymml:根據yyyymmCol欄位複製裡面值為yyyymml的值

  4. 把欄位名存起來

    List<String> colNameList = new ArrayList<String>(); 
    Set<Map.Entry<String,String>> set = map.entrySet(); 
    for(Map.Entry<String,String> entry:set) {
        colNameList.add(entry.getKey()); 
    }

  5. 根據欄位表名組SQL

    String sql = getSql(tableName, colNameList, yyyymmCol); 
    DAO.doCopy(sql);

  6. ★組Sql方法

    //yyyymml被複制的年月 yyyymmr推算出來要複製的年月
    public String getSql(String tableName,List<String> colNameList,String yyyymmCol){
        StringBuffer sqlStr = new StringBuffer();
        sqlStr.append(" insert  into  "+tableName+"  (   ");
        int n = colNameList.size();
        for(int i =0 ;i<n;i++) {
             String value = colNameList.get(i);
             if(i==n-1)
                 sqlStr.append(value+"  ");
             else
                 sqlStr.append(value+",");
        }
        sqlStr.append(" )  SELECT ");
        for(int i =0 ;i<n;i++) {
             String value = colNameList.get(i).equals(yyyymmCol)?"'"+yyyymmr+"'":colNameList.get(i);
             if(i==n-1)
                 sqlStr.append(value+"  ");
             else
                 sqlStr.append(value+",");
        }
        sqlStr.append("  from  "+tableName+"  where  "+yyyymmCol+"='"+yyyymml+"' ");
        return sqlStr.toString();
        }