下面的 SQL 有效
CREATE TABLE stored_file (
id INT AUTO_INCREMENT NOT NULL,
content BLOB,
content_length LONG,
PRIMARY KEY (id)
);
UPDATE stored_file SET content_length = length(content)
但我不能在 jOOQ 中做同样的事情。
getContext().update(STORED_FILE)
.set(STORED_FILE.CONTENT_LENGTH, DSL.length(STORED_FILE.CONTENT))
DSL.length 只允许 String 字段类型。
有解决办法吗?
最佳答案
每当您达到 jOOQ 的极限时,求助于 plain SQL .您可以像这样编写自己的长度函数:
class MyDSL {
public static Field<Long> length(Field<byte[]> field) {
return DSL.field("length({0})", Long.class, field);
}
}
现在在你所有的语句中使用它:
getContext().update(STORED_FILE)
.set(STORED_FILE.CONTENT_LENGTH, MyDSL.length(STORED_FILE.CONTENT))
当然,如果你真的想让 blob 的长度与 blob 本身保持同步,你可能最好 using a trigger (我假设是 MySQL),或者可能是一个 View 。
关于java - 选择 length(col) 以获取 jOOQ 中的 BLOB 内容大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28537793/