getBytes по сравнению с getBinaryStream по сравнению с getBlob для того, чтобы вытащить данные из столбца BLOB

Ваше "Скопировано!" строка в выводе исходит от конструктора копирования, поэтому вы создаете три объекта, а не два (тогда вы уничтожаете все три, как и ожидалось).

Обратите внимание, что конструктор копирования должен обычно принимать свой аргумент по ссылке const. Возможно, вы используете компилятор Microsoft C ++, который привязывает временную ссылку к неконстантной ссылке.

Также обратите внимание, что если вы включите оптимизацию, вы, вероятно, можете ожидать увидеть только два конструктора и два деструктора без создания копии. С достаточно новым (C ++ 17) компилятором это должно произойти, даже если вы не включаете оптимизацию (удаление из копии стало обязательным).

20
задан Kapsh 17 April 2009 в 15:05
поделиться

2 ответа

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

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

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

16
ответ дан 30 November 2019 в 01:06
поделиться

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

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

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

6
ответ дан 30 November 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: