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

标签 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 只允许 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/

相关文章:

java - Tapestry 布局和组件库

java - EditText.GetText,返回有关空引用的异常,但已声明

java - primefaces 消息不起作用

java - jOOQ:如何在投影中包含 "some_field IS NULL"谓词?

java - 如何使用 jOOQ 执行特定查询

java - JOOQ - 未应用内联转换器

java - 修改JList内容后正确更新其内容

java - 为什么我的 Eclipse 程序终止?

mysql - 什么是 Jooq 事务隔离级别?脏读会发生吗?

java - org.jooq.Query.getBindValues() 返回的 List<Object> 是否包含每个查询参数的类型安全对象?