gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

SqlParser 一個利用正則表達式解析單句SQL的類

先看要解析的樣例SQL語句:

復制代碼 代碼如下:
select * from dual
SELECT * frOm dual
Select C1,c2 From tb
select c1,c2 from tb
select count(*) from t1
select c1,c2,c3 from t1 where condi1=1
Select c1,c2,c3 From t1 Where condi1=1
select c1,c2,c3 from t1,t2 where condi3=3 or condi4=5 order by o1,o2
Select c1,c2,c3 from t1,t2 Where condi3=3 or condi4=5 Order by o1,o2
select c1,c2,c3 from t1,t2,t3 where condi1=5 and condi6=6 or condi7=7 group by g1,g2
Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2
Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3

解析效果之一(isSingleLine=false):

復制代碼 代碼如下:
原SQL為select * from dual
解析后的SQL為
select
*
from
dual
原SQL為SELECT * frOm dual
解析后的SQL為
select
*
from
dual
原SQL為Select C1,c2 From tb
解析后的SQL為
select
C1,c2
from
tb
原SQL為select c1,c2 from tb
解析后的SQL為
select
c1,c2
from
tb
原SQL為select count(*) from t1
解析后的SQL為
select
count(*)
from
t1
原SQL為select c1,c2,c3 from t1 where condi1=1
解析后的SQL為
select
c1,c2,c3
from
t1
where
condi1=1
原SQL為Select c1,c2,c3 From t1 Where condi1=1
解析后的SQL為
select
c1,c2,c3
from
t1
where
condi1=1
原SQL為select c1,c2,c3 from t1,t2 where condi3=3 or condi4=5 order by o1,o2
解析后的SQL為
select
c1,c2,c3
from
t1,t2
where
condi3=3 or condi4=5
order by
o1,o2
原SQL為Select c1,c2,c3 from t1,t2 Where condi3=3 or condi4=5 Order by o1,o2
解析后的SQL為
select
c1,c2,c3
from
t1,t2
where
condi3=3 or condi4=5
order by
o1,o2
原SQL為select c1,c2,c3 from t1,t2,t3 where condi1=5 and condi6=6 or condi7=7 group by g1,g2
解析后的SQL為
select
c1,c2,c3
from
t1,t2,t3
where
condi1=5 and condi6=6 or condi7=7
group by
g1,g2
原SQL為Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2
解析后的SQL為
select
c1,c2,c3
from
t1,t2,t3
where
condi1=5 and condi6=6 or condi7=7
group by
g1,g2
原SQL為Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3
解析后的SQL為
select
c1,c2,c3
from
t1,t2,t3
where
condi1=5 and condi6=6 or condi7=7
group by
g1,g2,g3
order by
g2,g3

解析效果之二(isSingleLine=true):

復制代碼 代碼如下:
原SQL為select * from dual
解析后的SQL為
select
*
from
dual
原SQL為SELECT * frOm dual
解析后的SQL為
select
*
from
dual
原SQL為Select C1,c2 From tb
解析后的SQL為
select
C1,
c2
from
tb
原SQL為select c1,c2 from tb
解析后的SQL為
select
c1,
c2
from
tb
原SQL為select count(*) from t1
解析后的SQL為
select
count(*)
from
t1
原SQL為select c1,c2,c3 from t1 where condi1=1
解析后的SQL為
select
c1,
c2,
c3
from
t1
where
condi1=1
原SQL為Select c1,c2,c3 From t1 Where condi1=1
解析后的SQL為
select
c1,
c2,
c3
from
t1
where
condi1=1
原SQL為select c1,c2,c3 from t1,t2 where condi3=3 or condi4=5 order by o1,o2
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2
where
condi3=3 or
condi4=5
order by
o1,
o2
原SQL為Select c1,c2,c3 from t1,t2 Where condi3=3 or condi4=5 Order by o1,o2
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2
where
condi3=3 or
condi4=5
order by
o1,
o2
原SQL為select c1,c2,c3 from t1,t2,t3 where condi1=5 and condi6=6 or condi7=7 group by g1,g2
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2,
t3
where
condi1=5 and
condi6=6 or
condi7=7
group by
g1,
g2
原SQL為Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2,
t3
where
condi1=5 and
condi6=6 or
condi7=7
group by
g1,
g2
原SQL為Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2,
t3
where
condi1=5 and
condi6=6 or
condi7=7
group by
g1,
g2,
g3
order by
g2,
g3

使用的類SqlParser,你可以拷貝下來使用之:

復制代碼 代碼如下:
package com.sitinspring.common.sqlFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* SQL語句解析器類
* @author: sitinspring(junglesong@gmail.com)
* @date: 2008-3-12
*/
public class SqlParser{
/**
* 逗號
*/
private static final String Comma = “,”;
/**
* 四個空格
*/
private static final String FourSpace = ” “;
/**
* 是否單行顯示字段,表,條件的標識量
*/
private static boolean isSingleLine=true;
/**
* 待解析的SQL語句
*/
private String sql;
/**
* SQL中選擇的列
*/
private String cols;
/**
* SQL中查找的表
*/
private String tables;
/**
* 查找條件
*/
private String conditions;
/**
* Group By的字段
*/
private String groupCols;
/**
* Order by的字段
*/
private String orderCols;
/**
* 構造函數
* 功能:傳入構造函數,解析成字段,表,條件等
* @param sql:傳入的SQL語句
*/
public SqlParser(String sql){
this.sql=sql.trim();
parseCols();
parseTables();
parseConditions();
parseGroupCols();
parseOrderCols();
}
/**
* 解析選擇的列
*
*/
private void parseCols(){
String regex=”(select)(.+)(from)”;
cols=getMatchedString(regex,sql);
}
/**
* 解析選擇的表
*
*/
private void parseTables(){
String regex=””;
if(isContains(sql,”\s+where\s+”)){
regex=”(from)(.+)(where)”;
}
else{
regex=”(from)(.+)($)”;
}
tables=getMatchedString(regex,sql);
}
/**
* 解析查找條件
*
*/
private void parseConditions(){
String regex=””;
if(isContains(sql,”\s+where\s+”)){
// 包括Where,有條件
if(isContains(sql,”group\s+by”)){
// 條件在where和group by之間
regex=”(where)(.+)(group\s+by)”;
}
else if(isContains(sql,”order\s+by”)){
// 條件在where和order by之間
regex=”(where)(.+)(order\s+by)”;
}
else{
// 條件在where到字符串末尾
regex=”(where)(.+)($)”;
}
}
else{
// 不包括where則條件無從談起,返回即可
return;
}
conditions=getMatchedString(regex,sql);
}
/**
* 解析GroupBy的字段
*
*/
private void parseGroupCols(){
String regex=””;
if(isContains(sql,”group\s+by”)){
// 包括GroupBy,有分組字段
if(isContains(sql,”order\s+by”)){
// group by 后有order by
regex=”(group\s+by)(.+)(order\s+by)”;
}
else{
// group by 后無order by
regex=”(group\s+by)(.+)($)”;
}
}
else{
// 不包括GroupBy則分組字段無從談起,返回即可
return;
}
groupCols=getMatchedString(regex,sql);
}
/**
* 解析OrderBy的字段
*
*/
private void parseOrderCols(){
String regex=””;
if(isContains(sql,”order\s+by”)){
// 包括GroupBy,有分組字段
regex=”(order\s+by)(.+)($)”;
}
else{
// 不包括GroupBy則分組字段無從談起,返回即可
return;
}
orderCols=getMatchedString(regex,sql);
}
/**
* 從文本text中找到regex首次匹配的字符串,不區分大小寫
* @param regex: 正則表達式
* @param text:欲查找的字符串
* @return regex首次匹配的字符串,如未匹配返回空
*/
private static String getMatchedString(String regex,String text){
Pattern pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(text);
while(matcher.find()){
return matcher.group(2);
}
return null;
}
/**
* 看word是否在lineText中存在,支持正則表達式
* @param lineText
* @param word
* @return
*/
private static boolean isContains(String lineText,String word){
Pattern pattern=Pattern.compile(word,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(lineText);
return matcher.find();
}
public String toString(){
// 無法解析則原樣返回
if(cols==null && tables==null && conditions==null && groupCols==null && orderCols==null ){
return sql;
}
StringBuffer sb=new StringBuffer();
sb.append(“原SQL為”+sql+”n”);
sb.append(“解析后的SQL為n”);
for(String str:getParsedSqlList()){
sb.append(str);
}
sb.append(“n”);
return sb.toString();
}
/**
* 在分隔符后加上回車
* @param str
* @param splitStr
* @return
*/
private static String getAddEnterStr(String str,String splitStr){
Pattern p = Pattern.compile(splitStr,Pattern.CASE_INSENSITIVE);
// 用Pattern類的matcher()方法生成一個Matcher對象
Matcher m = p.matcher(str);
StringBuffer sb = new StringBuffer();
// 使用find()方法查找第一個匹配的對象
boolean result = m.find();
// 使用循環找出模式匹配的內容替換之,再將內容加到sb里
while (result) {
m.appendReplacement(sb, m.group(0) + “n “);
result = m.find();
}
// 最后調用appendTail()方法將最后一次匹配后的剩余字符串加到sb里;
m.appendTail(sb);
return FourSpace+sb.toString();
}
/**
* 取得解析的SQL字符串列表
* @return
*/
public List<String> getParsedSqlList(){
List<String> sqlList=new ArrayList<String>();
// 無法解析則原樣返回
if(cols==null && tables==null && conditions==null && groupCols==null && orderCols==null ){
sqlList.add(sql);
return sqlList;
}
if(cols!=null){
sqlList.add(“selectn”);
if(isSingleLine){
sqlList.add(getAddEnterStr(cols,Comma));
}
else{
sqlList.add(FourSpace+cols);
}
}
if(tables!=null){
sqlList.add(” nfromn”);
if(isSingleLine){
sqlList.add(getAddEnterStr(tables,Comma));
}
else{
sqlList.add(FourSpace+tables);
}
}
if(conditions!=null){
sqlList.add(” nwheren”);
if(isSingleLine){
sqlList.add(getAddEnterStr(conditions,”(and|or)”));
}
else{
sqlList.add(FourSpace+conditions);
}
}
if(groupCols!=null){
sqlList.add(” ngroup byn”);
if(isSingleLine){
sqlList.add(getAddEnterStr(groupCols,Comma));
}
else{
sqlList.add(FourSpace+groupCols);
}
}
if(orderCols!=null){
sqlList.add(” norder byn”);
if(isSingleLine){
sqlList.add(getAddEnterStr(orderCols,Comma));
}
else{
sqlList.add(FourSpace+orderCols);
}
}
return sqlList;
}
/**
* 設置是否單行顯示表,字段,條件等
* @param isSingleLine
*/
public static void setSingleLine(boolean isSingleLine) {
SqlParser.isSingleLine = isSingleLine;
}
/**
* 測試
* @param args
*/
public static void main(String[] args){
List<String> ls=new ArrayList<String>();
ls.add(“select * from dual”);
ls.add(“SELECT * frOm dual”);
ls.add(“Select C1,c2 From tb”);
ls.add(“select c1,c2 from tb”);
ls.add(“select count(*) from t1”);
ls.add(“select c1,c2,c3 from t1 where condi1=1 “);
ls.add(“Select c1,c2,c3 From t1 Where condi1=1 “);
ls.add(“select c1,c2,c3 from t1,t2 where condi3=3 or condi4=5 order by o1,o2”);
ls.add(“Select c1,c2,c3 from t1,t2 Where condi3=3 or condi4=5 Order by o1,o2”);
ls.add(“select c1,c2,c3 from t1,t2,t3 where condi1=5 and condi6=6 or condi7=7 group by g1,g2”);
ls.add(“Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2”);
ls.add(“Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3”);
for(String sql:ls){
System.out.println(new SqlParser(sql));
//System.out.println(sql);
}
}
}
贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
国产精品嫩草影院8vv8 | 国产v片免费观看| 少妇黄色一级片| 国产精品www在线观看| 6080国产精品| 波多野结衣激情| 欧美少妇一级片| 欧美日韩视频免费在线观看| av在线网址导航| 岛国av免费在线| 色一情一区二区三区| 久久久久xxxx| 911av视频| 成人免费看片视频在线观看| 久久国产精品免费观看| 中文字幕第三区| 国产一二三四五| 久久人人爽人人爽人人av| 天堂а√在线中文在线| 亚洲中文字幕无码av永久| 国产日本在线播放| 91国产精品视频在线观看| 99热一区二区| 国产日本在线播放| 日日碰狠狠丁香久燥| 中文字幕成人免费视频| 日本一道在线观看| 国产中文字幕视频在线观看| 九九热免费精品视频| 干日本少妇视频| 成人免费在线小视频| 亚洲精品手机在线观看| 日本aa在线观看| 手机看片福利日韩| 浴室偷拍美女洗澡456在线| 成人免费毛片网| 青娱乐国产精品视频| 日韩久久一级片| 波多野结衣激情| 男人女人黄一级| 欧美一区二区三区综合| 亚洲性生活网站| 日本黄色片一级片| www.夜夜爽| 国产综合中文字幕| ijzzijzzij亚洲大全| 五月婷婷六月合| 国产亚洲天堂网| 黄色成人在线免费观看| 超碰超碰在线观看| 妞干网在线免费视频| 成人免费在线网| 亚洲高清在线不卡| 亚洲一区在线不卡| 日日碰狠狠丁香久燥| 欧美亚洲精品一区二区| 日韩精品福利片午夜免费观看| 亚洲综合欧美在线| 国产又黄又猛视频| 欧美一级黄色片视频| 免费高清在线观看免费| 男人添女荫道口图片| 国产一区二区三区在线免费| 久久免费视频2| 思思久久精品视频| 久久久精品高清| 小明看看成人免费视频| 色婷婷.com| 奇米视频7777| 亚洲综合激情五月| 日韩欧美中文视频| 成人黄色片免费| 日韩视频一二三| 日韩a级在线观看| 国内精品视频一区二区三区| 欧美激情 国产精品| 国产精品www在线观看| 国产无限制自拍| 国产女女做受ⅹxx高潮| 日本999视频| 日韩高清第一页| 大地资源网在线观看免费官网| 五月天激情图片| 日韩欧美一区二| 成人黄色一区二区| 天天干天天操天天玩| 久久精品久久99| 欧美a级免费视频| 波多野结衣综合网| 亚洲精品视频导航| 成人污网站在线观看| 日本手机在线视频| 久久99爱视频| 国产911在线观看| 69堂免费视频| 日本高清久久久| 国产不卡一区二区视频| 91最新在线观看| 欧美少妇一区二区三区| 精品国产免费av| 性久久久久久久久久久久久久| 一级黄色免费在线观看| 欧美亚洲另类色图| 北条麻妃亚洲一区| 国产精品-区区久久久狼| 一级做a爱视频| 黄色片视频在线播放| 亚洲国产欧美91| 国产一区亚洲二区三区| 免费高清一区二区三区| 奇米影视四色在线| 欧美精品久久久久久久自慰| 岛国av免费在线| 日日碰狠狠丁香久燥| 国产一区二区四区| 成年人网站av| 少妇一级淫免费放| 男人日女人逼逼| 久久久99精品视频| 四虎免费在线观看视频| 男人舔女人下面高潮视频| 人妻少妇精品久久| 日日噜噜夜夜狠狠久久丁香五月| 日本男人操女人| 亚洲午夜无码av毛片久久| 九九久久九九久久| 中文字幕 欧美日韩| 精品久久久久久中文字幕2017| 黄页免费在线观看视频| 免费超爽大片黄| 国产精品一色哟哟| 日韩在线观看a| 国产va亚洲va在线va| 欧美日韩dvd| 激情五月婷婷六月| 国产视频在线观看网站| 路边理发店露脸熟妇泻火| 91xxx视频| 天堂8在线天堂资源bt| 免费看欧美一级片| 久久久久免费看黄a片app| 国产一区二区视频播放| 男人揉女人奶房视频60分| 成人一级片网站| 天天影视综合色| 欧美第一页浮力影院| 麻豆中文字幕在线观看| 男同互操gay射视频在线看| 中文字幕在线中文| 黄网站欧美内射| 波多野结衣作品集| 中日韩av在线播放| 日韩一级特黄毛片| 女人天堂av手机在线| 亚洲 欧美 另类人妖| 国产大片一区二区三区| 69sex久久精品国产麻豆| 国产精品333| 国产一伦一伦一伦| 91精品一区二区三区四区| 国产在线青青草| 红桃视频一区二区三区免费| 久无码久无码av无码| 色七七在线观看| www.欧美黄色| 在线观看av日韩| 四虎4hu永久免费入口| 日本女优爱爱视频| 91.com在线| 在线观看免费视频高清游戏推荐| 亚洲五码在线观看视频| www.亚洲天堂网| 欧美黄色免费网址| 9l视频白拍9色9l视频| 国产色一区二区三区| 图片区乱熟图片区亚洲| 六月丁香婷婷激情| 成人手机在线播放| 日本高清一区二区视频| 久久精品国产精品亚洲色婷婷| www.午夜色| 色免费在线视频| 日韩欧美精品在线观看视频| 91精品国产毛片武则天| 在线免费看污网站| 国产麻花豆剧传媒精品mv在线| 欧美黄网在线观看| 国产精品久久久久久久99| 黄色成人免费看| 可以免费在线看黄的网站| 日韩精品免费一区| 300部国产真实乱| 天天爱天天做天天操| 天天影视色综合| 99re6在线观看| 亚洲免费黄色录像| 中文国产在线观看| 蜜臀av.com| 欧美乱做爰xxxⅹ久久久| 久久www视频|