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

2022-09-02 10:12:28

有 3 种不同的方法可以从列中获取数据BLOBResultSet

  • getBytes
  • getBinaryStream
  • getBlob

此外,返回的对象也具有可用的方法。BlobgetBlobgetBytesgetBinaryStream

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

该对象还具有自 JDBC 4.0 以来引入的调用。这有什么不同吗?Blobfree()


答案 1

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

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

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


答案 2

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

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

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


推荐