批量複製表資料
阿新 • • 發佈:2021-01-21
背景:公司想設計一個功能,根據年月的不同,批次複製資料,例如202101月的資料複製到202102月
注意:年月或者要修改的最好是多個主鍵裡面的一個,不然會出現主鍵重複
實現步驟和思路
-
首先根據TABLEID,獲取維護在一張表裡面的表明和要修改的欄位
-
根據邏輯獲取表名和要改欄位名
-
每次獲取一個表名,然後獲取表明每一列的欄位名,存放到map裡面
Map map = DAO.getColName(tableName,yyyymmCol, yyyymml); //tableName:表名 //yyyymmCol:要修改的表名欄位 //yyyymml:根據yyyymmCol欄位複製裡面值為yyyymml的值
-
把欄位名存起來
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()); }
-
根據欄位表名組SQL
String sql = getSql(tableName, colNameList, yyyymmCol); DAO.doCopy(sql);
-
★組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(); }