SQLite مع C++: دليل شامل مع أمثلة تطبيقية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو SQLite ولماذا تحتاجه في C++؟

SQLite هي قاعدة بيانات علائقية خفيفة الوزن ومضمنة لا تتطلب عملية خادم منفصلة. على عكس MySQL أو PostgreSQL، تعمل SQLite مباشرة مع ملف قاعدة البيانات على القرص، مما يجعلها الخيار الأمثل لتطبيقات سطح المكتب والأجهزة المحمولة والأنظمة المضمنة والمشاريع الصغيرة على الويب.

توجد عدة طرق للعمل مع SQLite في لغة C++. الطريقة الأكثر شيوعًا واستقرارًا هي استخدام المكتبة الرسمية sqlite3 (واجهة C API)، والتي تأتي كمجموعة من دوال C. ومع ذلك، لتسهيل العمل في C++، غالبًا ما تُستخدم أغلفة مثل SQLiteCpp أو sqlite_modern_cpp. في هذا المقال، سنركز على الاستخدام المباشر لواجهة C API (مكتبة sqlite3)، لأنها تمنحك أقصى تحكم وفهم للعمليات.

المزايا الرئيسية لـ SQLite:

  • بدون إعدادات: لا حاجة لتثبيت أو تكوين خادم.
  • قابلية النقل: قاعدة البيانات عبارة عن ملف واحد.
  • الموثوقية: دعم المعاملات (ACID).
  • السرعة: أسرع من قواعد البيانات خادم-عميل في معظم العمليات.
  • الحجم: المكتبة تشغل أقل من 600 كيلوبايت.

تثبيت SQLite لـ C++

تعتمد طريقة التثبيت على نظام التشغيل والمترجم الخاص بك. سنستعرض ثلاث طرق رئيسية.

1. التثبيت عبر مدير الحزم (Linux/macOS)

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install libsqlite3-dev

macOS (Homebrew):

brew install sqlite3

Fedora:

sudo dnf install sqlite-devel

2. التثبيت على Windows (vcpkg)

إذا كنت تستخدم vcpkg:

vcpkg install sqlite3:x64-windows
vcpkg integrate install

بعد ذلك، يمكنك تضمين #include <sqlite3.h> في Visual Studio.

3. الترجمة من المصدر (طريقة شاملة)

قم بتنزيل الملفين sqlite3.c و sqlite3.h من الموقع الرسمي sqlite.org. ثم أضفهم إلى مشروعك:

g++ main.cpp sqlite3.c -o myapp -lpthread -ldl

على Windows، قد تحتاج إلى إضافة -lws2_32.

بداية سريعة: أول برنامج مع SQLite في C++

لننشئ تطبيقًا بسيطًا لوحدة التحكم يفتح قاعدة بيانات، وينشئ جدولًا، ويدرج سجلًا واحدًا.

#include <iostream>
#include <sqlite3.h>

int main() {
    sqlite3 *db;
    char *errMsg = 0;

    // 1. فتح (أو إنشاء) قاعدة البيانات
    int rc = sqlite3_open("test.db", &db);
    if (rc) {
        std::cerr << "خطأ في فتح قاعدة البيانات: " << sqlite3_errmsg(db) << std::endl;
        return 1;
    }

    // 2. إنشاء جدول
    const char *sqlCreate = "CREATE TABLE IF NOT EXISTS users ("
                            "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                            "name TEXT NOT NULL, "
                            "age INTEGER);";

    rc = sqlite3_exec(db, sqlCreate, 0, 0, &errMsg);
    if (rc != SQLITE_OK) {
        std::cerr << "خطأ SQL: " << errMsg << std::endl;
        sqlite3_free(errMsg);
        sqlite3_close(db);
        return 1;
    }

    // 3. إدراج البيانات
    const char *sqlInsert = "INSERT INTO users (name, age) VALUES ('Alice', 30);";
    rc = sqlite3_exec(db, sqlInsert, 0, 0, &errMsg);
    if (rc != SQLITE_OK) {
        std::cerr << "خطأ في الإدراج: " << errMsg << std::endl;
        sqlite3_free(errMsg);
    } else {
        std::cout << "تمت إضافة السجل، المعرف: " << sqlite3_last_insert_rowid(db) << std                    

توصيات