比方說,我們有一個SQL片段如下圖所示:如何使用JOOQ檢查WHERE子句條件是否有效?
String condition = "field_name > 10 asd field_name1 <= 20"
不宜以下行拋出一個錯誤,而不是接受它?
query.addConditions(DSL.condition(condition));
有沒有辦法使用JOOQ驗證條件語法?此外,與addLimit不同,值不會被替換爲?,爲什麼?
比方說,我們有一個SQL片段如下圖所示:如何使用JOOQ檢查WHERE子句條件是否有效?
String condition = "field_name > 10 asd field_name1 <= 20"
不宜以下行拋出一個錯誤,而不是接受它?
query.addConditions(DSL.condition(condition));
有沒有辦法使用JOOQ驗證條件語法?此外,與addLimit不同,值不會被替換爲?,爲什麼?
下面的代碼不應該拋出錯誤而不是接受它嗎?
爲什麼要呢? DSL.condition(String)
是plain SQL API的一部分,它允許你任意SQL字符串片段傳遞給你想要一個jOOQ查詢元素,包括:
有沒有驗證你在普通的SQL片段裏面放什麼。數據庫將最終驗證查詢。但是jOOQ不知道偶然,數據庫中有一個asd
運算符。
有沒有辦法使用JOOQ驗證條件語法?
在jOOQ 3.9中有一個實驗Parser API,可通過DSLContext.parser()
獲得。它允許您解析SQL字符串並從中構建表達式樹。在這種情況下,asd
確實是一個無法識別的標記,並且會拋出異常。
你可以使用它作爲這樣的:
Condition condition =
ctx.parser().parseCondition("field_name > 10 asd field_name1 <= 20");
但正如我所說,作爲jOOQ 3.9,它的實驗性還是有很多漏洞。 jOOQ 3.10將刪除其實驗狀態。
此外,與addLimit不同,值不會被替換爲?,爲什麼?
因爲這就是普通SQL API的工作原理。如果你想綁定變量,你可以寫:
Condition condition = DSL.condition("field_name > ? asd field_name1 <= ?", 10, 20);
或者:
Condition condition =
DSL.condition("field_name > {0} asd field_name1 <= {1}", val(10), val(20));