2009-04-17 90 views
16

有3点不同的方式来获取数据了Blob列的: 的getBytes getBinaryStream getBlob的getBytes VS getBinaryStream VS getBlob获取数据了BLOB列

此外,通过getBlob返回的Blob对象也有一个getBytes和getBinaryStream就可以了。

有什么特别的原因(性能,内存,数据库特定的问题),我应该选择一个吗?

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

回答

12

如果你要成为拉动大量的数据(即数据足以引起内存问题),然后getBinaryStream会给你最大的灵活性来处理和丢弃数据,你在读它。

在另一方面,这可能会非常缓慢,这取决于您的JDBC驱动程序,因为从流中读取每个数据库可能会导致大量网络喋喋不休。如果您调用getBytes,那么司机知道一次性获取整批货物,这可能会更有效率。

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

+0

另外,在写一堆基于它的代码之前,确保getBlob是为JDBC驱动程序实现的。例如,Xerial sqlite-jdbc目前不实现它。 – Kelly 2015-04-27 19:56:47

6

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

  1. 表现。驱动程序有机会逐渐从数据库中提取字节。
  2. 记忆。您不必一次加载所有字节,并且在一个连续的块中。

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