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

时间:2015-02-16 09:02:39

标签: 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)

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

getContext().update(STORED_FILE)
  .set(STORED_FILE.CONTENT_LENGTH, DSL.length(STORED_FILE.CONTENT))

DSL.length只允许字符串字段类型。

有解决方法吗?

2 个答案:

答案 0 :(得分:3)

每当你达到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),或者也许是图。

答案 1 :(得分:0)

您的代码DSL.length(STORED_FILE.CONTENT)生成异常,因为这里允许使用BLOB数据类型,因此您更改了列内容的数据类型....