Как использовать MySQL C++ Connector для хранения двоичных данных?

StackOverflow https://stackoverflow.com/questions/1071120

Вопрос

У меня есть блок двоичных данных, определенный как:

адрес void*, size_tbinarySize;

который я хочу сохранить в базе данных MySQL с помощью MySQL C++ Connector.

Функция setBlob() принимает istream.

Вопрос:

Как я могу преобразовать необработанный адрес void*, size_tbinarySize в объект istream или istringstream?Можно ли это сделать без «копирования» данных?то естьсообщите istream указатель и размер, чтобы он мог указывать на него.

Это было полезно?

Решение

Вам нужно создать подклассstreambuf, например.так:

class DataBuf : public streambuf
{
public:
   DataBuf(char * d, size_t s) {
      setg(d, d, d + s);
   }
};

Затем вы можете создать экземпляр объекта istream, который использует DataBuf в качестве буфера, который сам использует ваш блок двоичных данных.Предположим, чтоbinarySize определяет размер ваших двоичных данных в байтах (sizeof(char) должен составлять один байт), вы можете сделать это следующим образом:

DataBuf buffer((char*)address, binarySize);
istream stream(&buffer);

Этот объект istream теперь можно передать в setBlob().

С уважением, Элрохир

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top