استخدام 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
يجلب الأسلوب جميع المستخدمين من قاعدة البيانات بشكل غير متزامن. إذا كنت تستخدم هذا الأسلوب، تظل واجهة المستخدم الخاصة بك مستجيبة حتى إذا كانت هناك مجموعة كبيرة من المستخدمين في قاعدة البيانات.