项目实训记录11--对于单表的去重

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
             }
        },)},
      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值