zoukankan      html  css  js  c++  java
  • java 对sql格式化

    public class SqlFormat{
        public static void main(String[] args){
            String sql="";
            sqlFormat(sql);
        }
        public static Map<String, String> map = new HashMap<String, String>();//需要换行的字段
        public static Map<String, String> bracket= new HashMap<String, String>();//括号前关键字
        static{
            map.put("select", "select");
            map.put("from", "from");
            map.put("group by", "group by");
            map.put("where", "where");
            map.put("order by", "order by");
    
            bracket.put("not", "not");
    
            map.put("(", "(");
            map.put(")", ")");
    
        }
    
        public static String SqlFormat(String sql){
            sql = sql.trim().replaceAll(",", ", ").replaceAll(" +", " ").replaceAll("\s+", " ").replace(" ", " |").replace("(", "|(|").replace(")", "|)|").replace("| |", " |").replace("||", "|");
            sql = sql.toLowerCase();
            int sj=0;//
            
            String[] sqlArray  = sql.split("\|");
            int length = sqlArray.length;
            Stack stack = new Stack();
            Stack stackTemp = new Stack();
    
            for(int i=0;i<length; i++){
                if("(".equals(sqlArray[i]).trim())){
                    if(map.get(sqlArray[i+1].trim())!=null){//后有关键字
                            stack.push("(");
                            printlnSql(sqlArray[i], sj);
                    }else if(bracket.get(sqlArray[i-1].trim())!=null){//前有关键字
                            stack.push("(");
                            printlnSql(sqlArray[i], sj);
                    }else{
                            stackTemp.push("(");
                            System.out.println(sqlArray[i]);
                    }
                }else if(")".equals(sqlArray[i].trim())){
                    if(stackTemp.size()>0){
                            stackTemp.pop();
                            System.out.println(sqlArray[i]);
                    }else{
                            stackTemp.pop();
                            sj=stack.size();
                            printlnSql(sqlArray[i], sj);
                    }
                }else if("".equals(sqlArray[i].trim())){
    
                }else if("(".equals(sqlArray[i].trim()) && map.get(sqlArray[i-1].trim())!=null){
    
                }else if(map.get(sqlArray[i].trim())!=null){
                    printlnSql(sqlArray[i], sj);
                }else{
                    System.out.print(sqlArray[i]);
                }
            }
            return sql;
        }
    
            pubulic static void printlnSql(String sqlSub, int i){
                    if(i>0){
                            System.out.println("
    ");
                            for(int j=0; j<i; j++){
                                    System.out.println("		");
                            }
                    }else{
                            System.out.println('
    '+sqlSub);
                    }
            }
    }
  • 相关阅读:
    c语言中 fgetc函数、fputc函数实现文件的复制
    c语言 13-7 利用fgetc函数输出文件的字符数
    c语言 13-6 利用fgetc函数输出文件的行数
    c语言中fgetc函数:显示文件内容
    c语言 13-5
    c语言 获取程序上一次运行时间的程序
    hzwer模拟赛 虫洞
    LYDSY热身赛 escape
    bzoj2330 糖果
    繁华模拟赛 Vicent坐电梯
  • 原文地址:https://www.cnblogs.com/firstdream/p/5671435.html
Copyright © 2011-2022 走看看