BLOB 和 CLOB
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
jOOQ 旨在从 jOOQ 客户端 API 隐藏所有 JDBC 细节。 特别是,java.sql.Clob
和 java.sql.Blob
是相当“苛刻”的 API,有一些注意事项,甚至可能取决于 JDBC 驱动程序的具体情况。
Clob
和 Blob
是资源(但不是 java.lang.AutoCloseable
!),具有与数据库的开放连接。 在普通的 jOOQ 上下文中,这没有任何意义,因为会通过 fetch()
方法急切地获取所有结果。 fetchLazy()
和 fetchStream()
可能是候选者,其中 Clob
和 Blob
类型可以作为底层 java.sql.ResultSet
和 java.sql.PreparedStatement
仍然打开,同时使用这些资源。
另一方面,ByteArrayInputStream
和 ByteArrayOutputStream
是两种不同的类型,不能表示为单个 Field<T>
类型。 如果选择其中一个作为 <T>
类型,我们将获得只读或只写字段。 因此,为了获得完整的惰性流支持,我们需要另一种双向包装器类型,类似于 Clob
和 Blob
。
在许多情况下,流式传输二进制数据并不是真正必要的,因为 byte[]
可以很容易地保存在内存中(并且无论如何都会这样做以便进一步处理,例如,在使用图像时),因此额外的工作可能不是真正需要的。 在 Oracle 中尤其如此,其中 BLOB 是唯一存在的二进制类型,没有正式的 (VAR)BINARY 类型,而 CLOB 从 4000 字节开始。
如果您想覆盖 jOOQ 的默认行为,请使用 org.jooq.impl.ClobBinding
或 org.jooq.impl.BlobBinding
,请参阅 自定义数据类型绑定 以及 在代码生成中使用绑定 以获取更多详细信息。
反馈
您对此页面有任何反馈吗? 我们很乐意听到!