كيف يمكنني استخدام MySQL C++ Connector لتخزين البيانات الثنائية؟
-
21-08-2019 - |
سؤال
لدي كتلة من البيانات الثنائية المحددة على النحو التالي:
عنوان باطلة *، 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().
التحيات ، إلرهير