[英]How to check the proper order of the clauses in a given sql query using regexp in java?
到目前為止,我只想檢查子句的順序-選擇,從哪里,在哪里排序。 在查詢中是正確的。 我嘗試了這個:
String pattern1 = "select";
String pattern2 = "from";
String pattern3 = "(where\\s*(.*?)|order by\\s*(.*?)|where\\s*(.*?)order by\\s*(.*?))";
String pattern4 = "(;|$)";
Pattern p = Pattern.compile(pattern1 + "(.*?)" + pattern2 + "(.*?)" + pattern3 + pattern4);
但這仍然與不正確的查詢匹配,如下所示:
select * from student order by marks where id<8;
我需要手動進行操作而不使用任何外部庫。
這個評論太長了。
SQL允許對列進行任意命名,因此簡單的字符串搜索是不夠的。 盡管不建議這樣做,但是您可以編寫如下查詢:
select 1 as `order`, 2 as `select`, 3 as `limit`
也就是說,簡單的字符串搜索是不夠的。
而且,更糟糕的是,SQL支持子查詢。 以下是一個合理的示例:
select (select col
from t
where . . .
group by x
order by count(*) desc
limit 1
) col, . . .
from tt
order by 2;
換句話說,這是一個遞歸語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.