在文档中显示:
默认情况下,驱动程序使用SQL定位器(BLOB)实现Blob, 表示Blob对象包含指向SQL BLOB的逻辑指针 数据而不是数据本身。
因此,如果我从数据库中获得一个Blob对象,那么我不会获得所有数据字节,而只会得到一个流,就像文件系统中File的InputStream一样(如果我错了,请纠正我)。
但是现在,如果我自己从构造函数创建Blob,例如使用Hibernate的Lobhelper,该怎么办?
有:
从这两个构造函数中得到的Blob的属性是什么?数据是在Blob对象内部还是流设置?
答案 0 :(得分:0)
Java中的Blob对象是Blob的映射(SQL中的二进制大对象对象。ResultSet,CallableStatement和PreparedStatement中的方法可以在Blob对象上使用。JDBCAPI允许Blob与int相同的方式使用) getBlob和setBlob之类的方法(与getInt和setInt相同)。
对Blob有某些限制:
因此不建议在Blob中存储整数。
答案 1 :(得分:0)
org.hibernate.engine.jdbc.NonContextualLobCreator
类负责休眠状态下Blob的创建,它使用org.hibernate.engine.jdbc.BlobProxy
,它实际上使用:
BinaryStreamImpl
用于createBlob(byte[] bytes)
定义为:{{1}
BinaryStreamImpl extends ByteArrayInputStream implements BinaryStream
使用BinaryStreamImpl
来保存对数组的引用。StreamBackedBinaryStream
用于ByteArrayInputStream
,其定义为:createBlob(InputStream stream, long length)
StreamBackedBinaryStream implements Stream
引用了您的视频流。因此,请检查源代码链接,以便更好地了解幕后情况。