【发布时间】:2018-10-19 07:57:12
【问题描述】:
从文档中说:
默认情况下,驱动程序使用 SQL 定位器 (BLOB) 实现 Blob,它 表示 Blob 对象包含指向 SQL BLOB 的逻辑指针 数据而不是数据本身。
因此,如果我从数据库中获取 Blob 对象,我不会获取数据的所有字节,而只会获取一个流,就像文件系统中文件的 InputStream 一样(如果我错了,请纠正我)。
但是现在,如果我自己从构造函数创建 Blob,例如使用 Hibernate 的 Lobhelper,会怎样?
有:
- createBlob(byte[] bytes)
- createBlob(InputStream 流,长长度)
我从这两个构造函数中返回的 Blob 的属性是什么?数据是在 Blob 对象内还是流设置?
【问题讨论】:
-
Blob将包含你给它的任何东西,你不应该关心如何维护它的确切细节,因为它可以在 Java 更新时发生变化。 --- 如果你给它一个InputStream,那么它就是这样,这意味着你只能从Blob的字节中询问一次,因为这会耗尽流。一次性使用是将数据作为INSERT或UPDATE语句的一部分发送到数据库。 -
您问题中引用的文字是关于
Blob从JDBC驱动程序获得的对象,作为SELECT语句的结果,它描述了驱动程序实现Blob的常用方法来源于数据库。并不意味着所有驱动程序都这样做,或者所有Blob对象都以这种方式实现。