هذا البرنامج التعليمي هو الثاني في سلسلة جرا برمجة سكليتي في C.
سكليتي يخزن مجموعة من الجداول في ملف واحد قاعدة البيانات، عادة ما تنتهي بـ .db. يشبه كل جدول جدول بيانات ، ويتكون من عدد من الأعمدة ولكل صف قيم.
إذا كان ذلك مفيدًا ، فكر في كل صف باعتباره هيكل، مع ال الأعمدة في الجدول المقابلة للحقول في الهيكل.
يمكن أن يحتوي الجدول على أكبر عدد ممكن من الصفوف على القرص. هناك حد أعلى ولكن 18،466،744،073،709،551،616 ضخم بدقة.
يمكن أن يحتوي الجدول على ما يصل إلى 2000 عمود أو إذا قمت بإعادة ترجمة المصدر ، يمكنك رفعه إلى 32767 عمودًا رائعًا.
واجهة برمجة تطبيقات SQLite
لاستخدام SQLite ، نحتاج إلى إجراء مكالمات إلى API. يمكنك العثور على مقدمة لواجهة برمجة التطبيقات هذه على الموقع الرسمي مقدمة إلى واجهة SQLite C / C ++ صفحة ويب. إنها مجموعة من الوظائف وسهلة الاستخدام.
أولاً ، نحتاج إلى قاعدة بيانات. هذا من النوع sqlite3 ويتم إرجاعه عن طريق مكالمة إلى sqlite3_open (اسم الملف ، ** ppDB). بعد ذلك ، نقوم بتنفيذ SQL.
دعنا نحصل على استطراد بسيط أولاً وأنشئ قاعدة بيانات قابلة للاستخدام وبعض الجداول باستخدام SQLiteSpy. (انظر البرنامج التعليمي السابق للحصول على روابط لذلك ومتصفح قاعدة بيانات SQLite).
أحداث و أماكن
قاعدة البيانات حول. سيعقد DB ثلاثة جداول لإدارة الأحداث في عدة أماكن. ستكون هذه الأحداث بمثابة الحفلات والمراقص والحفلات الموسيقية وستقام في خمسة أماكن (ألفا وبيتا وتشارلي ودلتا وصدى). عندما تقوم بتصميم نماذج من هذا القبيل ، فغالبًا ما يساعد ذلك في البدء بجدول بيانات. من أجل البساطة ، سأخزن فقط تاريخًا وليس وقتًا.
يحتوي جدول البيانات على ثلاثة أعمدة: التواريخ والمكان ونوع الحدث وحوالي عشرة أحداث مثل هذا. تبدأ التواريخ من 21 إلى 30 يونيو 2013.
الآن لا يوجد لدى SQLite نوع تاريخ صريح ، لذلك من الأسهل والأسرع تخزينه على أنه int وبنفس الطريقة التي يستخدمها Excel التواريخ (الأيام منذ 1 يناير 1900) لها قيم int من 41446 إلى 41455. إذا وضعت التواريخ في جدول بيانات ثم قمت بتنسيق عمود التاريخ كرقم مع 0 منزلة عشرية ، فسيبدو مثل هذا:
الآن يمكننا تخزين هذه البيانات في جدول واحد ، وعلى سبيل المثال البسيط ، قد يكون ذلك مقبولًا. لكن ممارسة تصميم قاعدة البيانات الجيدة تتطلب بعض تطبيع.
يجب أن تكون عناصر البيانات الفريدة مثل نوع المكان في جدولها الخاص وأن تكون أنواع الأحداث (الحفلات وغيرها) في جدول واحد. أخيرًا ، نظرًا لأن لدينا أنواع أحداث متعددة في أماكن متعددة ، (علاقة من كثير إلى كثير) ، نحتاج إلى جدول ثالث للاحتفاظ بها.
الجداول الثلاثة هي:
- أماكن - يحمل جميع الأماكن الخمسة
- أنواع الأحداث - يحمل جميع أنواع الأحداث الثلاثة
- الأحداث - يحمل معرف تاريخ المكان بالإضافة إلى معرف نوع الحدث. أضفت أيضًا حقل وصف لهذا الحدث ، على سبيل المثال "عيد ميلاد جيم".
يحتفظ الجدولان الأوليان بأنواع البيانات بحيث تحتوي الأماكن على أسماء ألفا للتردد. لقد أضفت رقمًا صحيحًا أيضًا وأنشأت فهرسًا لذلك. مع وجود عدد صغير من الأماكن (5) وأنواع الأحداث (3) ، يمكن القيام بذلك بدون فهرس ، ولكن مع وجود جداول أكبر ، سيصبح بطيئًا للغاية. لذلك أي عمود من المحتمل البحث فيه ، أضف فهرسًا ، ويفضل أن يكون عددًا صحيحًا
SQL لإنشاء هذا:
يحتوي الفهرس الموجود في جدول الأحداث على التاريخ والحدث المعرف ونوع الحدث والمكان. هذا يعني أنه يمكننا الاستعلام عن جدول الأحداث "لجميع الأحداث في تاريخ" ، "جميع الأحداث في مكان ما" ، "جميع الأطراف" وما إلى ذلك ومجموعات من مثل "جميع الأطراف في مكان ما" ، إلخ.
بعد تشغيل SQL إنشاء استعلامات الجدول ، يتم إنشاء الجداول الثلاثة. ملاحظة لقد وضعت كل ذلك sql في ملف نصي create.sql ويتضمن بيانات لملء بعض الجداول الثلاثة.
إذا وضعت؛ في نهاية الأسطر كما فعلت في create.sql ، يمكنك بعد ذلك تنفيذ جميع الأوامر دفعة واحدة وتنفيذها. بدون ال؛ عليك ان تدير كل منها بمفرده. في SQLiteSpy ، فقط انقر فوق F9 لتشغيل كل شيء.
لقد قمت أيضًا بتضمين sql لإسقاط جميع الجداول الثلاثة داخل تعليقات متعددة الأسطر باستخدام / *.. * / كما في C. ما عليك سوى اختيار الأسطر الثلاثة وإجراء ctrl + F9 لتنفيذ النص المحدد.
تدرج هذه الأوامر الأماكن الخمسة:
مرة أخرى لقد قمت بتعليق نص التعليق على جداول فارغة ، مع حذف من خطوط. ليس هناك تراجع لذا كن حذرا مع هؤلاء!
بشكل مثير للدهشة ، مع تحميل جميع البيانات (لا يُعترف كثيرًا) ، يكون ملف قاعدة البيانات بأكمله على القرص هو 7 كيلوبايت فقط.
بيانات الحدث
بدلاً من إنشاء مجموعة من عشرة عبارات إدراج ، استخدمت Excel لإنشاء ملف .csv لبيانات الحدث ثم استخدم الأداة المساعدة لسطر الأوامر SQLite3 (التي تأتي مع SQLite) والأوامر التالية للاستيراد ذلك.
ملاحظة: أي سطر مع بادئة النقطة (.) هو أمر. استخدم. help لعرض كل الأوامر. لتشغيل SQL ، اكتبه فقط بدون بادئة فترة.
يجب عليك استخدام blackslashes \\ \\ في مسار الاستيراد لكل مجلد. افعل فقط السطر الأخير بعد نجاح الاستيراد. عند تشغيل SQLite3 يكون الفاصل الافتراضي هو: لذلك يجب تغييره إلى فاصلة قبل الاستيراد.
العودة إلى الرمز
الآن لدينا قاعدة بيانات مكتظة بالكامل ، دعنا نكتب رمز C لتشغيل استعلام SQL هذا الذي يعرض قائمة الأطراف ، مع الوصف والتواريخ والأماكن.
- جديد على SQL؟ قراءة ما هو SQL؟
يقوم هذا بربط باستخدام عمود idvenue بين جدول الفعاليات والأماكن حتى نحصل على اسم المكان وليس قيمته id idvenue.
وظائف SQLite C API
هناك العديد من الوظائف ولكننا بحاجة فقط إلى حفنة. ترتيب المعالجة هو:
- فتح قاعدة البيانات مع sqlite3_open () ، والخروج إذا كان لديك خطأ فتحه.
- تحضير SQL مع sqlite3_prepare ()
- حلقة باستخدام slqite3_step () حتى لا مزيد من السجلات
- (في الحلقة) معالجة كل عمود مع sqlite3_column ...
- أخيرًا اتصل بـ sqlite3_close (db)
هناك خطوة اختيارية بعد استدعاء sqlite3_prepare حيث يتم ربط أي معلمات تم تمريرها ، لكننا سنوفر ذلك لبرنامج تعليمي في المستقبل.
لذلك في البرنامج المذكور أدناه الكود الزائف للخطوات الرئيسية هي:
تقوم دالة sql بإرجاع ثلاث قيم ، لذا إذا كانت sqlite3.step () == SQLITE_ROW ، فسيتم نسخ القيم من أنواع الأعمدة المناسبة. لقد استخدمت كثافة العمليات والنص. أعرض التاريخ كرقم ولكن لا تتردد في تحويله إلى تاريخ.
سرد رمز المثال