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);
                    }
            }
    }
  • 相关阅读:
    ArcGIS几种数据格式
    C#中的接口
    OpenFileDialog获取文件名和文件路径问题
    OO与设计模式的原则、目标
    设计模式-工厂模式三部曲
    .NET设计模式: 工厂模式
    最详细eclipse汉化插件安装教程
    Eclipse IDE for C/C++ Developers安装配置详解
    使用 Eclipse C/C++ Development Toolkit 开发应用程序
    VS开发好用的扩展
  • 原文地址:https://www.cnblogs.com/firstdream/p/5671435.html
Copyright © 2011-2022 走看看