选择 length(col) 以获取 jOOQ 中的 BLOB 内容大小

art*_*tol 3 java jooq

以下 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)
Run Code Online (Sandbox Code Playgroud)

但我不能在 jOOQ 中做同样的事情。

getContext().update(STORED_FILE)
  .set(STORED_FILE.CONTENT_LENGTH, DSL.length(STORED_FILE.CONTENT))
Run Code Online (Sandbox Code Playgroud)

DSL.length 仅允许 String 字段类型。

有没有解决的办法?

Luk*_*der 5

每当您达到 jOOQ 的限制时,就求助于普通 SQL。您可以像这样编写自己的长度函数:

class MyDSL {
    public static Field<Long> length(Field<byte[]> field) {
        return DSL.field("length({0})", Long.class, field);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在你的所有陈述中使用它:

getContext().update(STORED_FILE)
            .set(STORED_FILE.CONTENT_LENGTH, MyDSL.length(STORED_FILE.CONTENT))
Run Code Online (Sandbox Code Playgroud)

当然,如果您确实想让 blob 的长度与 blob 本身保持同步,那么最好使用触发器(我假设是 MySQL),或者可能是视图。