Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JOOQ检查WHERE子句条件是否有效?_Java_Sql_Parsing_Jooq - Fatal编程技术网

Java 如何使用JOOQ检查WHERE子句条件是否有效?

Java 如何使用JOOQ检查WHERE子句条件是否有效?,java,sql,parsing,jooq,Java,Sql,Parsing,Jooq,假设我们有一个SQL片段,如下所示: String condition = "field_name > 10 asd field_name1 <= 20" 有没有一种方法可以使用JOOQ验证条件语法?此外,与addLimit不同的是,这些值没有替换为?,为什么 下面的行不应该抛出错误而不是接受它吗 query.addConditions(DSL.condition(condition)); 为什么要这样做?是的一部分,它允许您将任何SQL字符串片段传递给所需的jOOQ查询元素,包

假设我们有一个SQL片段,如下所示:

String condition = "field_name > 10 asd field_name1 <= 20"
有没有一种方法可以使用JOOQ验证条件语法?此外,与addLimit不同的是,这些值没有替换为?,为什么

下面的行不应该抛出错误而不是接受它吗

query.addConditions(DSL.condition(condition));
为什么要这样做?是的一部分,它允许您将任何SQL字符串片段传递给所需的jOOQ查询元素,包括:

  • 简单SQL片段
  • 复杂的、特定于供应商的表达式
  • 语法错误,如果您愿意的话
在一个普通的SQL片段中,没有任何验证。数据库将最终验证查询。但jOOQ不知道数据库中是否碰巧有一个
asd
操作员

有没有一种方法可以使用JOOQ验证条件语法

JOOQ3.9中有一个实验版本,可通过以下途径获得。它允许您解析SQL字符串并从中构造表达式树。实际上,在这种情况下,
asd
将是一个无法识别的令牌,并将引发异常

您可以这样使用它:

Condition condition = 
    ctx.parser().parseCondition("field_name > 10 asd field_name1 <= 20");
条件=
parser().parseCondition(“字段名称>10 asd字段名称1?asd字段名称1{0}asd字段名称1
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));