簡體   English   中英

如何使用Java中的regexp在給定的SQL查詢中檢查子句的正確順序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM