1. 点击去重--或管理员将编辑为不允许重复时
允许 1 不允许 0
模块一:点击去重按钮
需要有dbname 和chartname
输出 重复的反馈 选择去重或保留
过程一:获取表id和数据库id
// 获取表id和数据库id
int DBid =Integer.parseInt(req.getParameter("dbid").trim());
int chartid =Integer.parseInt(req.getParameter("chartid").trim());
System.out.println(DBid+""+chartid);
过程二:获取表name和数据库name后,查找单条的id
public List<Integer> findSameId(String dbname,String chartname,String metas) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/"+dbname;
String user = "root";
String password = "sherlock2218";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
List<Integer> ids=new ArrayList<>();
try {
//1. 注册驱动
Class.forName(driver);
//2.获取连接对象
conn = DriverManager.getConnection(url, user, password);
//3.定义sql
String sql = "SELECT id FROM "+chartname+" GROUP BY "+ metas+ " HAVING Count(*) >0 ";
System.out.println(sql);
//4.获取执行sql对象
stmt = conn.createStatement();
//5.执行sql,返回结果集
rs = stmt.executeQuery(sql);
//6.处理结果
//循环判断游标是否是最后一行末尾。
//一行一行的移动,再逐个列获取数据
while(rs.next()){
//获取数据
//6.2 获取数据
/*
boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),
如果是,则返回false,如果不是则返回true
* getXxx(参数):获取数据
* Xxx:代表数据类型 如: int getInt() , String getString()
* 参数:
1. int:代表列的编号,从1开始 如: getString(1)
2. String:代表列名称。 如: getDouble("balance")
*/
int id = rs.getInt(1);
System.out.println(id + "---" );
ids.add(id);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//7.释放资源
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return ids;}
SQL:差不多这样 需要获取的是本表的meta信息 在拿出来后给去重叭
(SELECT
id
FROM
test1620 as a
GROUP BY
a.test1,
a.test2,
a.test4
HAVING
Count(*) >0)
过程三:获取所有的id
//获取某个表里的所有id
public List<Integer> findAllId(String dbname,String chartname) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/"+dbname;
String user = "root";
String password = "sherlock2218";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
List<Integer> ids=new ArrayList<>();
try {
//1. 注册驱动
Class.forName(driver);
//2.获取连接对象
conn = DriverManager.getConnection(url, user, password);
//3.定义sql
String sql = "SELECT id FROM "+chartname;
System.out.println(sql);
//4.获取执行sql对象
stmt = conn.createStatement();
//5.执行sql,返回结果集
rs = stmt.executeQuery(sql);
//6.处理结果
//循环判断游标是否是最后一行末尾。
//一行一行的移动,再逐个列获取数据
while(rs.next()){
//获取数据
//6.2 获取数据
/*
boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),
如果是,则返回false,如果不是则返回true
* getXxx(参数):获取数据
* Xxx:代表数据类型 如: int getInt() , String getString()
* 参数:
1. int:代表列的编号,从1开始 如: getString(1)
2. String:代表列名称。 如: getDouble("balance")
*/
int id = rs.getInt(1);
System.out.println(id + "---" );
ids.add(id);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//7.释放资源
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return ids;}
过程四:java做差集,得到了需要清洗的id值
//求差集
ids.removeAll(notIds);
for(Integer id:ids){
System.out.println(id+"===========");
}
过程五:这里考虑到是否展示时需要展示所有的,可以查询所有的然后把需要删除的id的value+需要删除
System.out.println(metas);
//获取相同的id
List<Integer> notIds=findSameId(dbname,chartname,metas);
// 获取所有的id
List<Integer> ids=findAllId(dbname,chartname);
// 这是存下来的
List<Map<String,Object>> ma=findAllInfo(notIds,columns,dbname,chartname);
for(Map<String,Object> objectMap:ma){
for (Map.Entry<String,Object> entry : objectMap.entrySet()) {
// System.out.println("Key = " + entry.getKey()+"Value = " + entry.getValue());
}
}
// 所有的
System.out.println(ids);
// 保留的
System.out.println(notIds);
ids.removeAll(notIds);
// 删除的
System.out.println(ids);
// 这是要删的
List<Map<String,Object>> ma1=findAllInfo(ids,columns,dbname,chartname);
for(Map<String,Object> objectMap:ma1){
for (Map.Entry<String,Object> entry : objectMap.entrySet()) {
entry.setValue(entry.getValue()+" 需要删除 ");
// System.out.println("Key = " + entry.getKey()+"Value = " + entry.getValue());
}
ma.add (objectMap);
}
for(Map<String,Object> objectMap:ma){
for (Map.Entry<String,Object> entry : objectMap.entrySet()) {
System.out.println("Key = " + entry.getKey()+"Value = " + entry.getValue());
}
}
qingXiMessage q=new qingXiMessage();
q.setObjects(ma);
q.setIds(ids);
//
return q;
结果:
过程六:前端展示
过程七:删除
删除确定、删除取消
chartQuchong(index,id){
//这个是调用后端去重方法,成功记得message提示
let params =new URLSearchParams()
params.append('dbid',this.dbid)
params.append('chartid',id)
axios.post('api/searchQuChong',params).then(res=>{
console.log(res.data)
this.tableData4=res.data
if(this.tableData4.ids.length==0){
this.$notify({
title: '未发现重复',
message: '未发现重复',
type: 'success'
});
}else{
this.dialogVisibleQuchong=true}
})
},
ConfirmDelete(){
// 这里获取id反正用axios
let params =new URLSearchParams()
params.append('dbname',this.tableData4.dbName)
params.append('dbid',this.dbid)
params.append('chartname',this.tableData4.chartName)
params.append('ids',this.tableData4.ids)
axios.post('api/DeleteZhengze',params).then(res=>{
if(res.data==1){
this.$notify({
title: '删除且备份成功',
message: '删除且备份成功',
type: 'success'
});
this.dialogVisibleQuchong=false
this.dialogDelete=false
}
},)},