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("\n");
for(int j=0; j<i; j++){
System.out.println("\t\t");
}
}else{
System.out.println('\n'+sqlSub);
}
}
}
java 对sql格式化的更多相关文章
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...
- (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date ...
- atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- java连接sql server2000/2005
接触Java或者JSP,难免会使用到数据库SQL Server 2000/2005(我使用2005标准版[9.0.3054]测试),经过自己的搜索和研究,使用JDBC连接SQL Server成功,特此 ...
- 使用java对sql server进行增删改查
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- java.text.MessageFormat格式化字符串时的小技巧
java.text.MessageFormat格式化字符串时的小技巧 public static void main(String[] args) throws InterruptedExceptio ...
- jTDS Java连接SQL Server 2000数据库
Java连接SQL Server 2000数据库时,有两种方法: (1)通过Microsoft的JDBC驱动连接.此JDBC驱动共有三个文件,分别 是mssqlserver.jar.msutil.ja ...
- Java 获取SQL查询语句结果
step1:构造连接Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnec ...
- Java 链接SQL Server 数据库
1 //Java 连接 SQL Server数据库 2 public static final String DRIVERNAME="com.microsoft.sqlserver.jdbc ...
随机推荐
- my.cnf配置详解[转载]
先粘贴一份mac下的mysql5.6.22的配置文件 # Example MySQL config file for medium systems. # # This is for a system ...
- 内存充足,但是为什么hadoop3无法启动nodemanager
[root@hadoop3 hadoop]# xloStarting namenodes on [hadoop3]上一次登录:三 12月 27 16:06:01 CST 2017pts/24 上Sta ...
- hosts所在文件夹以及***
hosts所在文件夹: Windows 系统hosts位于 C:\Windows\System32\drivers\etc\hosts Android(安卓)系统hosts位于 /etc/hosts ...
- YTU 2553: 谁是赢家
2553: 谁是赢家 时间限制: 1 Sec 内存限制: 128 MB 提交: 94 解决: 25 题目描述 某一天,hcbbt等一群弱菜去tamara巨巨家里一起玩了一个卡牌游戏.巨 巨家里有2 ...
- java 泛型的理解与应用
为什么使用泛型? 举个例子: public class GenericTest { public static void main(String[] args) { List list = new A ...
- 并不对劲的bzoj4827:loj2020:p3723:[AHOI/HNOI2017]礼物
题目大意 有两个长度为\(n\)(\(n\leq5*10^4\))的数列\(x_1,x_2,...,x_n\)和\(y_1,y_2,...,y_n\),两个数列里的数都不超过\(m\)(\(m\leq ...
- css 实现元素四角图片样式,元素的大小不定
demo 效果 css body { margin:; } .popup p{ margin-bottom:20px; margin-left:200px; } .popup p span{ disp ...
- pom.xml内容没有错,但一直报错红叉 解决办法
转自:http://www.cnblogs.com/sxdcgaq8080/p/5590254.html [maven] pom.xml内容没有错,但一直报错红叉 解决办法 1.首先看一下下面的这两个 ...
- win10系统安装loadrunner11提示“为了对电脑进行保护 已经阻止此应用”的解决方案
在执行loadrunner安装包中的setup.exe时会有如下提示: 解决方法:点击Win+R快捷键打开运行,输入“ gpedit.msc”按下回车键打开组策略编辑: 在左边选择[计算机配置]→[W ...
- Linux 常用命令十三 kill
一.kill命令 kill命令用来删除执行中的程序或工作.kill可将指定的信息送至程序.预设的信息为SIGTERM(15),可将指定程序终止.若仍无法终止该程序,可使用SIGKILL(9)信息尝试强 ...