منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : SQLite in Xamarin.Android Part1
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
بسم الله الرحمن الرحيم
(رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي)


السلام عليكم ورحمة الله وبركاته


التعامل مع قاعدة بيانات من نوع SQLite من خلال تطبيق أندرويد باستخدام تقنية Xamarin


في هذا الدرس سنتعلم كيفية التعامل مع قاعدة البيانات SQLite الاكثر استخداماً في تطبيقات الأندرويد ونتعرف على طرق الادخال والحذف والتحديث والبحث، وسنستخدم تقنية Linq في  وايضا سنتعلم بعض الامور المهمة التي يجب اتباعها في انهاء هذا التطبيق.


أولا: انشاء ملف قاعدة البيانات:

  1. قم بتنزيل البرنامج التالي لانشاء قاعدة البيانات من الرابط التالي: DB Browser for SQLite
  2. قم بانشاء قاعدة بيانات جديدة باسم test.db3 وذلك بالضغط على New DataBase واختيار مسار الملف.
  3. قم بانشاء جدول باسم testTable واضف اليه الحقول التالية وافعل كما في الصورة:

  4. قم بالضغط على Write Changes لحفظ التعديلات على الجدول.
  5. قم باغلاق البرنامج لننتقل الى التطبيق.

ثانياً: قم بانشاء Blank App (Android) باسم SQLiteCRUD من خلال الفيجوال ستوديو 2017.

ثالثاً: قم باضافة ملف قاعدة البيانات الى المجلد Assets وذلك بالشكل التالي:

RightClick on Assets folder--->Add--->Existing Item


وتختار الملف test.db3.


رابعاً: قم بادراج هذه المكتبة ( sqlite-net-pcl ) الاصدار v1.4.118 عن طريق NuGet وذلك :

RightClick on reference and select Manage NuGetPackage



الرابط الرسمي من Xamarin للتعامل مع SQLite بتقنية Linq
:


خامساً: قم باضافة الصلاحيات التالية


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"), PrimaryKeyAutoIncrement]
 
       public int Id getset; }
 
       [Column("TestName")]
 
       public string TestName getset; }
 
       [Column("TestAge")]
 
       public int TestAge getset; }
 
       [Column("TestAdress")]
 
       public string TestAdress getset; }
 
   }


حيث يتم استخدام الـ Attributes وذلك لربط الحقول في الجدول بالخصائص في الClass حيث يتم تمييز الكلاس كجدول والخصائص كحقول (اعمدة) وذلك بذكر نفس اسماء الحقول في الجدول وخصائصها (PrimaryKey, AutoIncrement, Unique, NotNull ..... etc) ونفس الشيء ينطبق على اسم الجدول.


سادساً: قم بانشاء 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<TestTableGetTests()
 
       {
 
           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(intid)
 
       {
 
           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(dbpathFileMode.Create)))
                {
                    
byte[] buffer = new byte[2048];
                    
int length 0;
                    while ((
length br.Read(buffer0buffer.Length)) > 0)
                    {
                        
bw.Write(buffer0length);
                    }
                }
            }
        }
 
   }


في البداية يتم تعريف متغير من نوع string وتسند اليه اسم ملف قاعدة البيانات.
ثم يتم تعريف متغير من نوع string لمسار قاعدة البيانات.
وتعريف متغير آخر من نوع SQLiteConnection باسم db.

ثم يتم تعريف دالة البناء (Constructor) لانشاء instance من db واستدعاء دالة الـ Copy.

ثم يتم تعريف دوال الـ:

  1. دالة GetTests لارجاع كل الحقول في الجدول.
  2. دالة InsertTest لاضافة قيد أو سجل الى الجدول.
  3. دالة UpdateTest لتحديث قيد أو سجل في الجدول.
  4. دالة DeleteTest لحذف سجل من الجدول بالاعتماد على الـ PrimaryKey.
  5. دالة Copydb لنسخل ملف قاعدة البيانات من مجلد الـ Assets الى الجهاز.


سنقف عند هذا الحد وسنستكمل الدرس باذن الله في جزءٍ ثانٍ ونستعرض فيه تصميم الواجهة.


والحمد لله رب العالمين
بارك الله فيك وزادك من علمه وخيره
وعليكم السلام ورحمة الله وبركاتة


الله يعطيك الصحة والعافية 

تسلم يدك
بارك الله فيك استاذ ... هل بامكانك اكمال باقي الدروس