استخدام SQLite بشكل غير متزامن

مكتمل

إذا قمت بتشغيل الاستعلامات على قاعدة بيانات بطريقة متزامنة، فقد يؤدي ذلك إلى مشاكل في الأداء وتطبيقات غير مستجيبة. يحتوي SQLite-net على واجهة برمجة تطبيقات غير متزامنة يمكنك استخدامها للحفاظ على استجابة تطبيقك.

في هذه الوحدة، ستتعلم كيفية استخدام واجهة برمجة تطبيقات SQLite-net غير المتزامنة للتأكد من أن تطبيقك يظل مستجيبا بدرجة عالية.

فهم الاستعلامات غير المتزامنة

حتى هذه النقطة، كل ما فعلته قد تم تنفيذه على مؤشر ترابط واجهة المستخدم. ومع ذلك، لبناء تطبيق محمول عالي الاستجابة، قد ترغب في فعل الأمور بشكل مختلف قليلاً. إذا شغّلت عمليات قاعدة بيانات على مؤشر ترابط واجهة المستخدم، فقد يتسبب في تجميد واجهة المستخدم إذا استغرقت العملية وقتًا طويلاً لاستكمالها.

لحل هذه المشكلة، يتضمن SQLite-net واجهة برمجة تطبيقات غير متزامنة SQLiteAsyncConnection من خلال الفئة . على سبيل المثال، لإنشاء جدول بشكل غير متزامن، يمكنك استخدام CreateTableAsync الأسلوب :

var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();

تنفيذ عمليات غير متزامنة باستخدام SQLite-net

SQLiteAsyncConnection تعرض الفئة عمليات مماثلة لنظيرتها المتزامنة. ومع ذلك، تستند العمليات كلها إلى المهام لاستخدامها في الخلفية.

تتضمن العمليات غير المتزامنة الشائعة المتوفرة ما يلي:

  • CreateTableAsync: إنشاء جدول استنادا إلى الفئة المشار إليها

  • DropTableAsync: إسقاط الجدول الذي يرتبط بالفئة المشار إليها

  • GetAsync: يحصل على السجل في الجدول الذي يرتبط بالفئة المشار إليها، ويطابق المفتاح الأساسي الذي تم تمريره إلى الدالة الإنشائية

  • InsertAsync: إدراج سجل جديد باستخدام العنصر الذي تم تمريره إلى الدالة الإنشائية

  • UpdateAsync: التحديثات سجل موجود باستخدام العنصر الذي تم تمريره إلى الدالة الإنشائية

  • DeleteAsync: يحذف السجل في الجدول الذي يعين إلى الفئة المشار إليها، ويطابق المفتاح الأساسي الذي تم تمريره إلى الدالة الإنشائية

  • QueryAsync: تشغيل استعلام SQL مباشر وإرجاع كائن

  • ExecuteAsync: تشغيل استعلام SQL مباشر وإرجاع عدد الصفوف المتأثرة

  • ExecuteScalarAsync: تشغيل استعلام SQL مباشر وإرجاع النتيجة الفردية

  • ToListAsync: تنفيذ أسلوب الجدول بشكل غير متزامن

توضح التعليمات البرمجية التالية مثالا على كيفية استخدام ToListAsync الأسلوب لاسترداد السجلات بشكل غير متزامن:

SQLiteAsyncConnection conn;
ObservableCollection<User> userList;  // Bound to UI
...
public async Task AddAllUsersAsync()
{
    List<User> users = await conn.Table<User>().ToListAsync();
    // Must be on UI thread here!
    foreach (var u in users)
        userList.Add(u);
}

في هذا المثال، ToListAsync يجلب الأسلوب جميع المستخدمين من قاعدة البيانات بشكل غير متزامن. إذا كنت تستخدم هذا الأسلوب، تظل واجهة المستخدم الخاصة بك مستجيبة حتى إذا كانت هناك مجموعة كبيرة من المستخدمين في قاعدة البيانات.