بسم الله الرحمن الرحيم
(رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي)
السلام عليكم ورحمة الله وبركاته
التعامل مع قاعدة بيانات من نوع SQLite من خلال تطبيق أندرويد باستخدام تقنية Xamarin
في هذا الدرس سنتعلم كيفية التعامل مع قاعدة البيانات SQLite الاكثر استخداماً في تطبيقات الأندرويد ونتعرف على طرق الادخال والحذف والتحديث والبحث، وسنستخدم تقنية Linq في وايضا سنتعلم بعض الامور المهمة التي يجب اتباعها في انهاء هذا التطبيق.
أولا: انشاء ملف قاعدة البيانات:
- قم بتنزيل البرنامج التالي لانشاء قاعدة البيانات من الرابط التالي: DB Browser for SQLite
- قم بانشاء قاعدة بيانات جديدة باسم test.db3 وذلك بالضغط على New DataBase واختيار مسار الملف.
- قم بانشاء جدول باسم testTable واضف اليه الحقول التالية وافعل كما في الصورة:
-
- قم بالضغط على Write Changes لحفظ التعديلات على الجدول.
- قم باغلاق البرنامج لننتقل الى التطبيق.
ثانياً: قم بانشاء Blank App (Android) باسم SQLiteCRUD من خلال الفيجوال ستوديو 2017.
ثالثاً: قم باضافة ملف قاعدة البيانات الى المجلد Assets وذلك بالشكل التالي:
RightClick on Assets folder--->Add--->Existing Item
وتختار الملف test.db3.
وتختار الملف test.db3.
رابعاً: قم بادراج هذه المكتبة ( sqlite-net-pcl ) الاصدار v1.4.118 عن طريق NuGet وذلك :
RightClick on reference and select Manage NuGetPackage
خامساً: قم باضافة الصلاحيات التالية
الى ملف الـ Android Manifest.xml لتصبح الملف بهذا الشكل:
حيث بامكانك اختيار الصلاحيات المطلوبة لعمل التطبيق.
خامساً: قم بانشاء Class بنفس اسم الجدول TestTable بهذا الشكل:
خامساً: قم باضافة الصلاحيات التالية
PHP كود :
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
الى ملف الـ Android Manifest.xml لتصبح الملف بهذا الشكل:
PHP كود :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yourname.SQLiteCRUD" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
<uses-sdk android:minSdkVersion="17" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application android:allowBackup="true" android:label="@string/app_name"></application>
</manifest>
ويمكنك ايضا اضافتها عن طريق الدخول الى Properties ثم Android Manifest بهذا الشكل:
حيث بامكانك اختيار الصلاحيات المطلوبة لعمل التطبيق.
خامساً: قم بانشاء Class بنفس اسم الجدول TestTable بهذا الشكل:
PHP كود :
using SQLite;
namespace SQLiteCRUD
{
[Table("testTable")]
public class TestTable
{
[Column("Id"), PrimaryKey, AutoIncrement]
public int Id { get; set; }
[Column("TestName")]
public string TestName { get; set; }
[Column("TestAge")]
public int TestAge { get; set; }
[Column("TestAdress")]
public string TestAdress { get; set; }
}
}
حيث يتم استخدام الـ Attributes وذلك لربط الحقول في الجدول بالخصائص في الClass حيث يتم تمييز الكلاس كجدول والخصائص كحقول (اعمدة) وذلك بذكر نفس اسماء الحقول في الجدول وخصائصها (PrimaryKey, AutoIncrement, Unique, NotNull ..... etc) ونفس الشيء ينطبق على اسم الجدول.
سادساً: قم بانشاء Class باسم SQLiteManipulation وتكون بهذا الشكل:
في البداية يتم تعريف متغير من نوع string وتسند اليه اسم ملف قاعدة البيانات.
ثم يتم تعريف متغير من نوع string لمسار قاعدة البيانات.
وتعريف متغير آخر من نوع SQLiteConnection باسم db.
ثم يتم تعريف دالة البناء (Constructor) لانشاء instance من db واستدعاء دالة الـ Copy.
ثم يتم تعريف دوال الـ:
سنقف عند هذا الحد وسنستكمل الدرس باذن الله في جزءٍ ثانٍ ونستعرض فيه تصميم الواجهة.
والحمد لله رب العالمين
سادساً: قم بانشاء Class باسم SQLiteManipulation وتكون بهذا الشكل:
PHP كود :
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Android.App;
using SQLite;
namespace SQLiteCRUD
{
public class SQLiteManipulation
{
public const string dbname = "test.db3";
public string dbpath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), dbname);
public SQLiteConnection db;
public SQLiteManipulation()
{
Copydb();
db = new SQLiteConnection(dbpath);
}
public List<TestTable> GetTests()
{
return db.Table<TestTable>().ToList();
}
public bool InsertTest(TestTable testTable)
{
try
{
db.Insert(testTable);
return true;
}
catch
{
return false;
}
}
public bool UpdateTest(TestTable testTable)
{
try
{
db.Update(testTable);
return true;
}
catch
{
return false;
}
}
public bool DeleteTest(int? id)
{
try
{
db.Delete<TestTable>(id);
return true;
}
catch
{
return false;
}
}
public void Copydb()
{
if (File.Exists(dbpath))
return;
using (var br = new BinaryReader(Application.Context.Assets.Open(dbname)))
{
using (var bw = new BinaryWriter(new FileStream(dbpath, FileMode.Create)))
{
byte[] buffer = new byte[2048];
int length = 0;
while ((length = br.Read(buffer, 0, buffer.Length)) > 0)
{
bw.Write(buffer, 0, length);
}
}
}
}
}
}
ثم يتم تعريف متغير من نوع string لمسار قاعدة البيانات.
وتعريف متغير آخر من نوع SQLiteConnection باسم db.
ثم يتم تعريف دالة البناء (Constructor) لانشاء instance من db واستدعاء دالة الـ Copy.
ثم يتم تعريف دوال الـ:
- دالة GetTests لارجاع كل الحقول في الجدول.
- دالة InsertTest لاضافة قيد أو سجل الى الجدول.
- دالة UpdateTest لتحديث قيد أو سجل في الجدول.
- دالة DeleteTest لحذف سجل من الجدول بالاعتماد على الـ PrimaryKey.
- دالة Copydb لنسخل ملف قاعدة البيانات من مجلد الـ Assets الى الجهاز.
سنقف عند هذا الحد وسنستكمل الدرس باذن الله في جزءٍ ثانٍ ونستعرض فيه تصميم الواجهة.
والحمد لله رب العالمين