Подтвердить что ты не робот

GetBytes vs getBinaryStream vs getBlob для получения данных из столбца BLOB

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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