getBytes против getBinaryStream против getBlob для получения данных из столбца BLOB - PullRequest
19 голосов
/ 17 апреля 2009

Существует 3 способа извлечения данных из столбца BLOB-объектов: GetBytes getBinaryStream getBlob

Кроме того, объект Blob, возвращаемый getBlob, также содержит getBytes и getBinaryStream.

Существуют ли какие-либо конкретные причины (проблемы с производительностью, памятью, проблемы с базами данных), по которым я должен выбрать одну над другой?

Объект Blob также имеет вызов free (), который появился с JDBC 4.0. Это имеет значение?

Ответы [ 2 ]

15 голосов
/ 17 апреля 2009

Если вы собираетесь извлекать много данных (т. Е. Достаточно данных, чтобы вызвать проблемы с памятью), то getBinaryStream предоставит вам большую гибкость для обработки и отбрасывания данных при их чтении.

С другой стороны, это может быть довольно медленным, в зависимости от вашего драйвера JDBC, так как каждое чтение из потока может повлечь за собой большую сетевую болтовню с базой данных. Если вы вызываете getBytes, то драйвер знает, что нужно извлечь всю партию за один раз, что, вероятно, будет более эффективным.

getBlob () возвращает «указатель» на данные, которым вы можете манипулировать, используя методы интерфейса Blob. Если вам нужно изменить или иным образом использовать данные на месте, это может быть лучше для вас.

6 голосов
/ 17 апреля 2009

Обычно вы хотите выбрать потоковые методы (т.е. getBlob (). GetBinaryStream () или getBinaryStream ()) вместо метода байтового массива.

  1. Производительность. Драйвер может постепенно извлекать байты из базы данных.
  2. Память. Вам не нужно загружать все байты одновременно и в одном непрерывном блоке.

В худшем случае база данных (или драйвер JDBC) действительно не поддерживает потоковые двоичные данные, но при этом все еще нет ощутимых штрафов за использование потоковых методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...