كيف يمكنني استخدام MySQL C++ Connector لتخزين البيانات الثنائية؟

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

سؤال

لدي كتلة من البيانات الثنائية المحددة على النحو التالي:

عنوان باطلة *، size_t ثنائي الحجم؛

الذي أريد تخزينه في قاعدة بيانات MySQL باستخدام MySQL C++ Connector.

الدالة setBlob() تأخذ istream.

السؤال:

كيف يمكنني التحويل من عنوان void* خام، size_t ثنائي الحجم إلى كائن 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