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("\n");
for(int j=0; j<i; j++){
System.out.println("\t\t");
}
}else{
System.out.println('\n'+sqlSub);
}
}
}

java 对sql格式化的更多相关文章

  1. java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...

  2. (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date ...

  3. atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  4. java连接sql server2000/2005

    接触Java或者JSP,难免会使用到数据库SQL Server 2000/2005(我使用2005标准版[9.0.3054]测试),经过自己的搜索和研究,使用JDBC连接SQL Server成功,特此 ...

  5. 使用java对sql server进行增删改查

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  6. java.text.MessageFormat格式化字符串时的小技巧

    java.text.MessageFormat格式化字符串时的小技巧 public static void main(String[] args) throws InterruptedExceptio ...

  7. jTDS Java连接SQL Server 2000数据库

    Java连接SQL Server 2000数据库时,有两种方法: (1)通过Microsoft的JDBC驱动连接.此JDBC驱动共有三个文件,分别 是mssqlserver.jar.msutil.ja ...

  8. Java 获取SQL查询语句结果

    step1:构造连接Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnec ...

  9. Java 链接SQL Server 数据库

    1 //Java 连接 SQL Server数据库 2 public static final String DRIVERNAME="com.microsoft.sqlserver.jdbc ...

随机推荐

  1. unix2dos/dos2unix

    dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文件是以\r\n作为断行标志的 ...

  2. bzoj2101【Usaco2010 Dec】Treasure Chest 藏宝箱

    2101: [Usaco2010 Dec]Treasure Chest 藏宝箱 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 418  Solved: ...

  3. XMU 1612 刘备闯三国之桃园结义 【二分】

    1612: 刘备闯三国之桃园结义 Time Limit: 1000 MS  Memory Limit: 128 MBSubmit: 181  Solved: 12[Submit][Status][We ...

  4. Android无法自动创建USB打印机节点/dev/usb/lp0【转】

    本文转载自:http://blog.csdn.net/u013686019/article/details/50165059 Android: 4.4.4 一.问题分析 当把USB打印机插入Andro ...

  5. casperjs userAgent的一些问题

    casperjs 的options内的userAgent若设置为非正常浏览器的字符串,可能导致form无法正确提交. 表现为,this.click()失效,或evaluate(function(){$ ...

  6. LOJ114_k 大异或和_线性基

    LOJ114_k 大异或和_线性基 先一个一个插入到线性基中,然后高斯消元. 求第K小就是对K的每一位是1的都用对应的线性基的一行异或起来即可. 但是线性基不包含0的情况,因此不能确定能否组成0,需要 ...

  7. BZOJ_1670_[Usaco2006 Oct]Building the Moat护城河的挖掘_求凸包

    BZOJ_1670_[Usaco2006 Oct]Building the Moat护城河的挖掘_求凸包 Description 为了防止口渴的食蚁兽进入他的农场,Farmer John决定在他的农场 ...

  8. python创建文件

    创建文件: 1. os.mknod(“test.txt”) 创建空文件 2. open(“test.txt”,w) 直接打开一个文件,如果文件不存在则创建文件 import os def mkdir_ ...

  9. body和html

    1 关于html和body的背景颜色的一些变现 当给body设置背景颜色时(html没有背景颜色),这时body被当做根节点被浏览器俘获,浏览器界面的背景颜色就为body的background颜色:当 ...

  10. char-rnn-tensorflow源码解析及结构流程分析

    char-rnn-tensorflow由飞飞弟子karpathy编写,展示了如何用tensorflow来搭建一个基本的RNN(LSTM)网络,并进行基于char的seq2seq进行训练. 数据读取部分 ...