Как использовать MySQL C++ Connector для хранения двоичных данных?
-
21-08-2019 - |
Вопрос
У меня есть блок двоичных данных, определенный как:
адрес 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().
С уважением, Элрохир