عودة
الصورة البارزه لـ استخدام قاعدة بيانات SQflite فى flutter

استخدام قاعدة بيانات SQflite فى flutter

مقدمة بسيطه فى استخدام قاعدة بيانات sqlflite فى فلاتر وتوضيح لبعض المميزات والعيوب

سنوضح فى هذا المقال طريقه استخدام قاعدة بيانات sqflite ومتى نقوم باستخدام قاعدة البيانات هذة بالذات ولماذا هى افضل من غيرها لاسخدامها فى بيئة العمل flutter

مقدمة

SQflite هو اضاقة لـ SQLite لـ Flutter. يتيح لك التحكم الكامل في قاعدة البيانات والاستعلامات والعلاقات وكل ما تتمناه.

لماذا تستخدم SQflite

يعد SQFlite جيدًا عندما تحتاج إلى بيانات علائقية ولكن أيضًا تحكم دقيق في الاستعلامات الفعلية. إذا كنت راضيًا عن كتابة استفساراتك ولا تمانع في كتابة الكثير من طلبات البحث والرمز لتحويل النتائج إلى classes وإليها ، فقد يكون هذا مناسبًا لك.

الميزات 👍

  • السيطرة الكاملة على قاعدة البيانات.
  • قاعدة بيانات SQLite فعالة للغاية لتطبيقك (بالنظر إلى أن لديك معرفة مسبقة بـ SQLite).
  • سهلة القراءة عن طريق تطبيقات الجهات الخارجية التي يمكنها فتح قواعد بيانات SQLite (حتى تتمكن من فتح قاعدة البيانات على جهاز الكمبيوتر الخاص بك ومعرفة شكل البيانات).

العيوب 👎

  • يمكن أن تستغرق كتابة جميع إستعلاماتك يدويًا الكثير من الوقت.
  • لا يتم كتابة البيانات التي تم إرجاعها من قاعدة البيانات بقوة منذ البداية.
  • من المحتمل أن يكون من الصعب معالجة عمليات الترحيل على الجهاز (عندما يتغير المخطط بين تحديثات الإصدار على سبيل المثال).
  • ليس لديها دعم للويب.

طريقة الاستخدام

سنقوم بالتوضيح بشكل بسيط طريقه اضافة sqflite الى المشروع الخاص بنا

اضافة dependency

نقوم باضافة هذا الكود الى ملف pubspec.yaml

dependencies:
  ...
  sqflite: ^1.3.0

استدعاء المكتبة

import 'package:sqflite/sqflite.dart';

هذا مثال بسيط لمعظم الاوامر الهامة

// Get a location using getDatabasesPath
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'demo.db');

// Delete the database
await deleteDatabase(path);

// open the database
Database database = await openDatabase(path, version: 1,
    onCreate: (Database db, int version) async {
  // When creating the db, create the table
  await db.execute(
      'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
});

// Insert some records in a transaction
await database.transaction((txn) async {
  int id1 = await txn.rawInsert(
      'INSERT INTO Test(name, value, num) VALUES("some name", 1234, 456.789)');
  print('inserted1: $id1');
  int id2 = await txn.rawInsert(
      'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
      ['another name', 12345678, 3.1416]);
  print('inserted2: $id2');
});

// Update some record
int count = await database.rawUpdate(
    'UPDATE Test SET name = ?, value = ? WHERE name = ?',
    ['updated name', '9876', 'some name']);
print('updated: $count');

// Get the records
List<Map> list = await database.rawQuery('SELECT * FROM Test');
List<Map> expectedList = [
  {'name': 'updated name', 'id': 1, 'value': 9876, 'num': 456.789},
  {'name': 'another name', 'id': 2, 'value': 12345678, 'num': 3.1416}
];
print(list);
print(expectedList);
assert(const DeepCollectionEquality().equals(list, expectedList));

// Count the records
count = Sqflite
    .firstIntValue(await database.rawQuery('SELECT COUNT(*) FROM Test'));
assert(count == 2);

// Delete a record
count = await database
    .rawDelete('DELETE FROM Test WHERE name = ?', ['another name']);
assert(count == 1);

// Close the database
await database.close();