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

时间:2009-04-17 15:05:42

标签: java sql jdbc

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

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

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

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

2 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:6)

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

  1. 性能。驱动程序有机会从数据库中逐步提取字节。
  2. 存储器。您不必一次加载所有字节,也不必加载一个连续的块。
  3. 最糟糕的情况是数据库(或JDBC驱动程序)并不真正支持流式二进制数据,但是使用流式传输方法仍然没有明显的损失。