可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

BLOB 和 CLOB

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

jOOQ 旨在从 jOOQ 客户端 API 隐藏所有 JDBC 细节。 特别是,java.sql.Clobjava.sql.Blob 是相当“苛刻”的 API,有一些注意事项,甚至可能取决于 JDBC 驱动程序的具体情况。

ClobBlob 是资源(但不是 java.lang.AutoCloseable!),具有与数据库的开放连接。 在普通的 jOOQ 上下文中,这没有任何意义,因为会通过 fetch() 方法急切地获取所有结果。 fetchLazy()fetchStream() 可能是候选者,其中 ClobBlob 类型可以作为底层 java.sql.ResultSetjava.sql.PreparedStatement 仍然打开,同时使用这些资源。

另一方面,ByteArrayInputStreamByteArrayOutputStream 是两种不同的类型,不能表示为单个 Field<T> 类型。 如果选择其中一个作为 <T> 类型,我们将获得只读或只写字段。 因此,为了获得完整的惰性流支持,我们需要另一种双向包装器类型,类似于 ClobBlob

在许多情况下,流式传输二进制数据并不是真正必要的,因为 byte[] 可以很容易地保存在内存中(并且无论如何都会这样做以便进一步处理,例如,在使用图像时),因此额外的工作可能不是真正需要的。 在 Oracle 中尤其如此,其中 BLOB 是唯一存在的二进制类型,没有正式的 (VAR)BINARY 类型,而 CLOB 从 4000 字节开始。

如果您想覆盖 jOOQ 的默认行为,请使用 org.jooq.impl.ClobBindingorg.jooq.impl.BlobBinding,请参阅 自定义数据类型绑定 以及 在代码生成中使用绑定 以获取更多详细信息。

反馈

您对此页面有任何反馈吗? 我们很乐意听到!

The jOOQ Logo