簡體   English   中英

如何使用JOOQ檢查WHERE子句條件是否為VALID?

[英]How to check if a WHERE clause condition is VALID or not using JOOQ?

可以說我們有一個如下所示的SQL片段:

String condition = "field_name > 10 asd field_name1 <= 20"

以下行不應該拋出錯誤而不是接受它嗎?

query.addConditions(DSL.condition(condition));

有沒有辦法使用JOOQ驗證條件語法? 此外,與addLimit不同,值不會替換為?,為什么會這樣?

以下行不應該拋出錯誤而不是接受它嗎?

為什么要這樣? DSL.condition(String)普通SQL API的一部分 ,它允許您將任何SQL字符串片段傳遞給您想要的jOOQ查詢元素,包括:

  • 簡單的SQL片段
  • 特定於供應商的復雜表達式
  • 語法錯誤,如果你願意的話

你在普通的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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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