getBytes vs getBinaryStream vs getBlob用于从BLOB列中获取数据

Kap*_*psh 20 java sql jdbc

有三种不同的方法可以从Blob列中获取数据:getBytes getBinaryStream getBlob

此外,getBlob返回的Blob对象上还有一个getBytes和getBinaryStream.

是否有任何特殊原因(性能,内存,数据库特定问题)我应该选择另一个?

Blob对象也有一个自JDBC 4.0以来引入的free()调用.这有什么区别吗?

ska*_*man 16

如果您要提取大量数据(即足够的数据导致内存问题),那么getBinaryStream将为您提供最大的灵活性来处理和丢弃数据.

另一方面,这可能会非常慢,具体取决于您的JDBC驱动程序,因为每次从流中读取都可能需要与数据库进行大量的网络聊天.如果你调用getBytes,那么驱动程序就知道要一次性获取整个批次,这可能会更有效率.

getBlob()返回数据的"指针",您可以使用Blob接口上的方法对其进行操作.如果您需要修改或以其他方式熟悉原位数据,那么这可能是最适合您的.


Jas*_*hen 6

通常,您希望选择基于流的方法(即getBlob().getBinaryStream()或getBinaryStream())而不是字节数组方法.

  1. 性能.驱动程序有机会从数据库中逐步提取字节.
  2. 记忆.您不必一次加载所有字节,也不必加载一个连续的块.

最糟糕的情况是数据库(或JDBC驱动程序)并不真正支持流式二进制数据,但是使用流式传输方法仍然没有明显的损失.