java.sql.Blob包含什么?

时间:2018-10-18 23:20:17

标签: java sql hibernate

在文档中显示:

  

默认情况下,驱动程序使用SQL定位器(BLOB)实现Blob,   表示Blob对象包含指向SQL BLOB的逻辑指针   数据而不是数据本身。

因此,如果我从数据库中获得一个Blob对象,那么我不会获得所有数据字节,而只会得到一个流,就像文件系统中File的InputStream一样(如果我错了,请纠正我)。

但是现在,如果我自己从构造函数创建Blob,例如使用Hibernate的Lobhelper,该怎么办?

有:

  • createBlob(byte []个字节)
  • createBlob(InputStream流,很长)

从这两个构造函数中得到的Blob的属性是什么?数据是在Blob对象内部还是流设置?

2 个答案:

答案 0 :(得分:0)

Java中的Blob对象是Blob的映射(SQL中的二进制大对象对象。ResultSet,CallableStatement和PreparedStatement中的方法可以在Blob对象上使用。JDBCAPI允许Blob与int相同的方式使用) getBlob和setBlob之类的方法(与getInt和setInt相同)。

对Blob有某些限制:

  1. 不能使用等于(或不等于)运算符
  2. 不能使用OrderBy,Distinct和GroupBy。

因此不建议在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引用了您的视频流。

因此,请检查源代码链接,以便更好地了解幕后情况。