Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 如何创建字段<;T>;从jOOQ中的值T,显式地?_Java_Sql_Jooq - Fatal编程技术网

Java 如何创建字段<;T>;从jOOQ中的值T,显式地?

Java 如何创建字段<;T>;从jOOQ中的值T,显式地?,java,sql,jooq,Java,Sql,Jooq,在jOOQ中,在表达式中使用绑定变量很容易,例如: MY_TABLE.COL.eq(1); 我的表COL.in(1,2,3); 我的表列在(1)和(10)之间; 上述所有方法都接受T和Field类型,例如or。但是如果我想把bind变量放在表达式的左侧呢?这些显然不起作用: 1.eq(MY_TABLE.COL); 1.in(MY_TABLE.COL1,MY_TABLE.COL2,MY_TABLE.COL3); 1.介于(MY_TABLE.COL1)和(MY_TABLE.COL2)之间; 如何

在jOOQ中,在表达式中使用绑定变量很容易,例如:

MY_TABLE.COL.eq(1);
我的表COL.in(1,2,3);
我的表列在(1)和(10)之间;
上述所有方法都接受
T
Field
类型,例如or。但是如果我想把bind变量放在表达式的左侧呢?这些显然不起作用:

1.eq(MY_TABLE.COL);
1.in(MY_TABLE.COL1,MY_TABLE.COL2,MY_TABLE.COL3);
1.介于(MY_TABLE.COL1)和(MY_TABLE.COL2)之间;
如何将那些
1
“xyz”
转换为
字段
字段


(这是jOOQ邮件列表等中非常流行的一个问题,所以我在这里记录它)

接受
T
的方法只是方便的方法。在幕后,它们都将
T
参数封装在

//这个
MY_TABLE.COL.eq(1);
//为了方便起见:
MY_TABLE.COL.eq(val(1));
//或者更确切地说,这一个
MY_TABLE.COL.eq(val(1,MY_TABLE.COL.getDataType());
因为将所有内容包装在
val()
中会非常冗长和麻烦,为了方便起见,jOOQ的所有API接受
字段也接受
T
。如果Java有未标记的联合类型,那么这些方法的参数类型将是
T | Field

在极少数情况下,用户需要在
val()
中显式包装其绑定值,包括:

  • 当绑定值位于表达式的左侧时
  • 在不支持此类重载的子句中使用绑定值时,例如在
    select()
  • 当具有多个重载的函数要求其中一个参数具有
    字段
    类型时
所以,只要写下:

val(1).eq(MY_TABLE.COL);
val(1).in(MY_TABLE.COL1,MY_TABLE.COL2,MY_TABLE.COL3);
val(1).介于(MY_TABLE.COL1)和(MY_TABLE.COL2)之间;
注意,还需要创建“内联值”,或“常量”、“文本”,而不是绑定值

另见: