JAVA 删除SQL某个不存在的字段

运用场景

表中有个字段存储着A表的sql语句,由于A表删除了某个字段导致以前存储的sql语句执行失败找不到该字段,对此我封装了一个工具类对不存在的SQl字段进行删除

/**
 * 使用说明
 * 1.只支持简单的更新和插入单表操作
 * 2.SQL关键字要求大写比如UPDATE 不能写为 update
 */
package com.yujie;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * 使用说明
 * 1.只支持简单的单表操作
 * 2.SQL关键字要求大写比如UPDATE 不能写为 update
 */
public class ConversionSQL{
    public static void main(String[] args) {
        String insert ="INSERT INTO menu( `parent_id`, `name`, `icon`, `link`, `help_id`, `help_code`) VALUES (400, '坐席当前状态管理', 'fa fa-building-o', '/ccUserCurrentStatus/', 813, 'MSHJZXGLZXDQZTGL')";
        String update ="UPDATE `level` SET name=5, min_grade=4 WHERE `level`='A' AND max_grade2 = 1 AND name=5";
        System.out.println("请输入要删除的字段名字:");
        
        Scanner scanner = new Scanner(System.in);
        String column = scanner.nextLine();
        insertAndUpdate(insert,column);
        insertAndUpdate(update,column);

    }


    public static String update(String sql,String column){
        String prefix=sql.substring(0,sql.indexOf("SET")+3)+" ";

        String[] arrays = sql.split("WHERE");
        String[] s1 = arrays[0].substring(arrays[0].indexOf("SET")+3).split(",");;
        String[] s2 = arrays[1].split(" ");

        ArrayList<String> list1 = new ArrayList<>();
        ArrayList<String> list2 = new ArrayList<>();
        list1.addAll(Arrays.asList(s1));
        list2.addAll(Arrays.asList(s2));


        for (int i = 0; i < list1.size(); i++) {
            String result=list1.get(i).substring(0,list1.get(i).indexOf("=")).replaceAll(" ","");
            if(column.equals(result)){
                list1.remove(i);
                break;
            }
        }



        for (int i = 0; i < list2.size(); i++) {
            String result=list2.get(i);
            if(result.contains("=")){
                result = result.substring(0,result.indexOf("="));
            }
            if(column.equals(result)){
                list2.set(i," 1 = 1");
            }
        }

        String newSql="";
        for (int i = 0; i < list1.size() ; i++) {
            newSql+=list1.get(i)+",";
        }
        newSql=newSql.substring(0,newSql.length()-1);

        String newSql2="";
        for (int i = 0; i < list2.size() ; i++) {
            newSql2+=list2.get(i)+" ";
        }

        System.out.println("原数据");
        System.out.println(sql);
        System.out.println("替换");
        System.out.println(prefix + newSql+ "WHERE" +newSql2);
        return prefix + newSql+ "WHERE" +newSql2;
    }
    public static String insert(String sql,String column){

        String prefix=sql.substring(0,sql.indexOf("("))+" ";
        String sql2=sql.substring(sql.indexOf("("),sql.lastIndexOf(")")+1).replaceAll("\\(", "").replaceAll("\\)", "");
        String[] values = sql2.split("VALUES");
        String s1 = values[0];
        String s2 = values[1];
        String[] s3 = s1.split(",");
        String[] s4 = s2.split(",");

        List<String> list3 = new ArrayList<>();
        List<String> list4 = new ArrayList<>();
        list3.addAll(Arrays.asList(s3));
        list4.addAll(Arrays.asList(s4));

        int index=-1;

        String field="`"+column+"`";
        for (int i=0;i<list3.size();i++) {
            String result = list3.get(i).replaceAll(" ","");
            if(field.equals(result)){
                index=i;
                break;
            }
        }
        list3.remove(index);
        list4.remove(index);


        String newSql1="( ";
        for (int i = 0; i < list3.size(); i++) {
            if(i != list3.size()-1){
                newSql1+=list3.get(i)+",";
            }else{
                newSql1+=list3.get(i);
            }
        }
        newSql1+=" )";

        String newSql2="( ";
        for (int i = 0; i < list4.size(); i++) {
            if(i != list4.size()-1){
                newSql2+=list4.get(i)+",";
            }else{
                newSql2+=list4.get(i);
            }
        }
        newSql2+= ")";

        System.out.println("原数据");
        System.out.println(sql);
        System.out.println("替换");
        System.out.println(prefix + newSql1 + " VALUES " +newSql2 );

        return prefix + newSql1 + " VALUES " +newSql2;
    }

    public static void  insertAndUpdate(String sql,String column){
        if(sql.startsWith("UPDATE")){
            if (!sql.contains(column)){
                throw new RuntimeException("更新操作失败!不存在的字段:"+column);
            }
            update(sql,column);
        }
        if(sql.startsWith("INSERT")){
            if (!sql.contains(column)){
                throw new RuntimeException("插入操作失败!不存在的字段:"+column);
            }
            insert(sql,column);
        }

    }
}

运行效果

请输入要删除的字段名字:
name
原数据
INSERT INTO menu( `parent_id`, `name`, `icon`, `link`, `help_id`, `help_code`) VALUES (400, '坐席当前状态管理', 'fa fa-building-o', '/ccUserCurrentStatus/', 813, 'MSHJZXGLZXDQZTGL')
替换
INSERT INTO menu (  `parent_id`, `icon`, `link`, `help_id`, `help_code`  ) VALUES (  400, 'fa fa-building-o', '/ccUserCurrentStatus/', 813, 'MSHJZXGLZXDQZTGL')
原数据
UPDATE `level` SET name=5, min_grade=4 WHERE `level`='A' AND max_grade2 = 1 AND name=5
替换
UPDATE `level` SET  min_grade=4 WHERE `level`='A' AND max_grade2 = 1 AND  1 = 1 

猜你喜欢

转载自blog.csdn.net/qq_42058998/article/details/129253218
今日推荐