在 Jooq 中将函数指定为值
Specify function as value in Jooq
使用Jooq,我想在插入期间指定一个字段的值作为一个函数。
在 SQL 服务器中,等效查询是:
insert into table (a, t) values ('foo', SYSDATETIME())
将绑定值与表达式混合:
假设您使用的是 generated code,这样写:
// Assuming this static import, as always:
import static org.jooq.impl.DSL.*;
ctx.insertInto(TABLE)
.columns(TABLE.A, TABLE.T)
.values(val("foo"), currentTimestamp()) // or currentLocalDateTime()
.execute();
VALUES()
子句只有 2 个重载:
- 只接受绑定变量
- 只接受表达式
它没有混合两种东西的重载,因为需要的重载会呈指数级增长。所以这里要做的关键是明确包装你的bind variables using DSL.val()
。
另见这个问题:
关于 SYSDATETIME
的注释
jOOQ 通过 DSL.currentTimestamp()
and DSL.currentLocalDateTime()
. If you prefer using SYSDATETIME
, you can create a plain SQL template for that, or use DSL.function()
支持标准 SQL CURRENT_TIMESTAMP
表达式
使用Jooq,我想在插入期间指定一个字段的值作为一个函数。
在 SQL 服务器中,等效查询是:
insert into table (a, t) values ('foo', SYSDATETIME())
将绑定值与表达式混合:
假设您使用的是 generated code,这样写:
// Assuming this static import, as always:
import static org.jooq.impl.DSL.*;
ctx.insertInto(TABLE)
.columns(TABLE.A, TABLE.T)
.values(val("foo"), currentTimestamp()) // or currentLocalDateTime()
.execute();
VALUES()
子句只有 2 个重载:
- 只接受绑定变量
- 只接受表达式
它没有混合两种东西的重载,因为需要的重载会呈指数级增长。所以这里要做的关键是明确包装你的bind variables using DSL.val()
。
另见这个问题:
关于 SYSDATETIME
的注释
jOOQ 通过 DSL.currentTimestamp()
and DSL.currentLocalDateTime()
. If you prefer using SYSDATETIME
, you can create a plain SQL template for that, or use DSL.function()
CURRENT_TIMESTAMP
表达式