شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز
🎯 ثبت نام

استفاده از SQLite.NET در Xamarin.Forms

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.

استفاده از SQLite.NET در Xamarin.Forms

استفاده از SQLite در Xamarin.Forms بسیار ساده است. اما قبل از شروع پیاده سازی باید با یکسری مفاهیم آشنا شد.

بسته به قالبی که برای پروژه خود انتخاب می کنید، رویکردهای مختلفی برای ترکیب SQLite.NET  به کار گرفته می شود:

·         Solution های PCL: Solution های PCL با بهره گیری از SQLite.NET PCL NuGet packages، به راحتی با ارجاع دهی به کلاس های SQLite، در کد مشترک با پایگاه داده ترکیب می شوند و این امکان به همراه NuGet عرضه شده است. با استفاده از Xamarin.Forms DependencyService برای هر پلتفرم ، ارتباط با SQLite ایجاد می شود. البته در این مقاله به آن نیاز خواهیم داشت.

·         پروژه های مشترک (Shared Projects): پروژه های مشترک مستقیماً از طریق GitHub با منبع Net ترکیب می شود و به کلاس های SQLite ارجاع می دهد. زمانی که به کدهای یک پلتفرم خاص نیاز باشد از دستورات کامپایلر استفاده می شود، مانند تعیین محل فایل داده های SQLite.

اکثر کدهای SQLite.NET در تمام پلتفرم ها قابل اشتراک گذاری هستند. فقط کافیست برای هر پلتفرم، ارتباط با پایگاه داده را تنظیم و محل فایل پایگاه داده SQLite را مشخص کرد که در ادامه برای هر نوع Solution توضیح خواهم داد.

در این مقاله از SQLite به همراه قالب Xamarin.Forms PCL استفاده خواهم کرد.

ساخت یک پروژه جدید و افزودن پشتیبانی SQLite

یک پروژه جدید با نام XamarinSqliteSample  ایجاد کنید.

آموزش Xamarin

حالا باید یک Package جدید به نام SQLite.Net به پروژه خود اضافه کنیم. این Package یک  پوشش برای SQLite خواهد بود که اجازه دسترسی به قابلیت های بومی SQLite را از طریق Xamarin.Forms PCL یا Shared project می دهد. برای افزودن امکان پشتیبانی از SQLite در یک Solution با قالب Xamarin.Forms PCL، باید کتابخانه مشترک PCL (shared PCL library) را شروع کنیم. از اینرو بر روی نام پروژه راست کلیک کرده و Manage NuGet Packages را انتخاب کنید تا پشتیبانی  SQLite.Net را اضافه کنیم.

SQLite.Net PCL را انتخاب کرده و نصب کنید:

آموزش Xamarin

پس از اضافه شدن ارجاع (reference) مورد نظر، یک اینترفیس بنویسید تا عملکرد هر پلتفرم را از هم جدا کنیم. تنها کاری که باید در مورد SQLite.Net برای هر پلتفرم انجام دهیم این است که محل فایل پایگاه داده را مشخص کنیم و یک ارتباط (connection) ایجاد کنیم. در پروژه PCL یک اینترفیس به نام ISQLite ایجاد کنید و کدهای زیر را در آن قرار دهید:

using SQLite.Net;

namespace XamarinSqliteSample

{

    public interface ISQLite

    {

        SQLiteConnection GetConnection();

    }

}

با پیاده سازی این اینترفیس در پروژه های بومی از طریق DependencyService به ارتباط (connection) دسترسی خواهیم داشت.

ساخت پایگاه داده

حالا به قابلیت های SQLite دسترسی داریم و می توانیم پایگاه داده خود را تعریف کنیم. در این مثال ساده فقط قرار است اطلاعات یکسری دانشجو نگهداری شود. نام این کلاس Student خواهد بود.

using System;

using SQLite.Net.Attributes;

 

namespace XamarinSqliteSample

{

    public class Student

    {

        [PrimaryKey, AutoIncrement]

        public int Id { get; set; }

        public string Name { get; set; }

        public string Address { get; set; }

        public string Phone { get; set; }

 

        public Student()

        {

        }

    }

}

 

همانطور که در کد فوق مشاهده می کنید، چهار ستون تعریف شده است که از این بین id به عنوان کلید اصلی (PrimaryKey) و به صورت خود افزایشی (AutoIncrement) در نظر گرفته شده است.

برای سادگی یک کلاس به عنوان پایگاه داده می سازیم و منطق دسترسی به پایگاه داده و جدول هایش را در آن نگهداری میکنیم. نام این کلاس StudentDB خواهد بود:

using System.Collections.Generic;

using System.Linq;

using SQLite.Net;

using Xamarin.Forms;

 

namespace XamarinSqliteSample

{

    public class StudentDB

    {

        private SQLiteConnection _sqlconnection;

 

        public StudentDB()

        {

            //Getting conection and Creating table 

            _sqlconnection = DependencyService.Get().GetConnection();

            _sqlconnection.CreateTable();

        }

 

        //Get all students 

        public IEnumerable GetStudents()

        {

            return (from t in _sqlconnection.Table() select t).ToList();

        }

 

        //Get specific student 

        public Student GetStudent(int id)

        {

            return _sqlconnection.Table().FirstOrDefault(t => t.Id == id);

        }

 

        //Delete specific student 

        public void DeleteStudent(int id)

        {

            _sqlconnection.Delete(id);

        }

 

        //Add new student to DB 

        public void AddStusent(Student student)

        {

            _sqlconnection.Insert(student);

        }

    }

}

در سازنده StudentDB() دو نکته مهم به چشم می خورد. اول اینکه برای دسترسی به کلاس های ثبت شده در اینترفیس StudentDB، از متد GetConnection() در کلاس DependencyService استفاده شده است.

دوماً، با استفاده از متد CreateTable در کلاس SQLiteConnection یک جدول به نام Student ایجاد شده است. البته این جدول زمانی ساخته می شود که از قبل موجود نباشد.

پیاده سازی iOS

اصلی ترین مانعی که هنگام استفاده از SQLite وجود دارد و باید حل شود، وقتی است که می خواهیم داده ها را در فایل واقعی پایگاه داده ذخیره کنیم. این مانع از یک پلتفرم به پلتفرم دیگر فرق دارد.

پیش از آنکه هر قابلیتی از SQLite را به پروژه iOS اضافه کنیم، باید علاوه بر پکیج SQLite.Net PCL، پکیج SQLite.NET PCL – XamarinIOS Platform را ازطریق Nuget به این پروژه اضافه کنیم. به محض اضافه کردن این پروژه ها، می توانید کدهای SQLite را در پروژه iOS خود اضافه کنیم.

یک کلاس به نام SQLite_iOS ایجاد می کنیم تا اینترفیس ISQLite را پیاده سازی کند.

using System;

using Xamarin.Forms;

using XamarinSqliteSample.iOS;

using System.IO;

 

[assembly: Dependency(typeof(SQLite_iOS))]

namespace XamarinSqliteSample.iOS

{

    public class SQLite_iOS : ISQLite

    {

        public SQLite.Net.SQLiteConnection GetConnection()

        {

            var fileName = "Student.db3";

            var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

            var libraryPath = Path.Combine(documentsPath, "..", "Library");

            var path = Path.Combine(libraryPath, fileName);

 

            var platform = new SQLite.Net.Platform.XamarinIOS.SQLitePlatformIOS();

            var connection = new SQLite.Net.SQLiteConnection(platform, path);

 

            return connection;

        }

    }

}

 

 

از آنجا که می خواهیم این کلاس به عنوان Dependency تعریف شود، لذا از صفت assembly در بالای فایل استفاده شده است تا بتواند از طریق متد Get در کلاس DependencyService بازیابی شود.

حالا که به محل صحیح ذخیره فایل پایگاه داده دسترسی داریم، یک شی SQLiteConnection ایجاد میکنیم و آن را به پروژه PCL برمیگردانیم.

پیاده سازی اندروید

پیاده سازی اندروید نیز خیلی مشابه پیاده سازی iOS است. تنها تفاوتشان در این است که مسیر فایل پایگاه داده متفاوت خواهد بود. در اینجا نیز لازم است بسته های SQLite.Net PCL و SQLite.NET PCL – XamarinAndroid را از طریق Nuget نصب کرده باشید.

یک کلاس به نام SQLite_Android ایجاد کنید تا اینترفیس ISQLite را پیاده سازی کند.

using System;

using System.IO;

using Xamarin.Forms;

using XamarinSqliteSample.Droid;

 

[assembly: Dependency(typeof(SQLite_Android))]

namespace XamarinSqliteSample.Droid

{

    public class SQLite_Android : ISQLite

    {

        public SQLite.Net.SQLiteConnection GetConnection()

        {

            var filename = "Student.db3";

            var documentspath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

            var path = Path.Combine(documentspath, filename);

 

            var platform = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();

            var connection = new SQLite.Net.SQLiteConnection(platform, path);

            return connection;

        }

    }

}

 

پیاده سازی Windows Phone

برای Windows phone کمی بیشتر کار می برد. موتور پایگاه داده SQLite در سیستم عامل های iOS و اندروید وجود دارد. برای اضافه کردن پشتیبانی به پروژه Windows Phone دستورات زیر را دنبال کنید:

پس از نصب SQLite، پکیج های SQLite.NetPCL و SQLite.Net PCL – WindowsPhone 8 Platform را به پروژه خود اضافه کنید. با نصب این پکیج ها می توانید اینترفیس ISQLite را برای Windows Phone پیاده سازی کنید.

using Xamarin.Forms;

using XamarinSqliteSample.WinPhone;

using System.IO;

using Windows.Storage;

 

[assembly: Dependency(typeof(SQLite_WinPhone))]

namespace XamarinSqliteSample.WinPhone

{

    public class SQLite_WinPhone : ISQLite

    {

        public SQLite_WinPhone()

        {

        }

        public SQLite.Net.SQLiteConnection GetConnection()

        {

            var filename = "Student.db3";

            var path = Path.Combine(ApplicationData.Current.LocalFolder.Path, filename);

 

            var platfrom = new SQLite.Net.Platform.WindowsPhone8.SQLitePlatformWP8();

            var connection = new SQLite.Net.SQLiteConnection(platfrom, path);

            return connection;

        }

    }

}

 

ساخت رابط کاربری

برای این مثال ساده یک رابط کاربری ساده طراحی خواهیم کرد. دو صفحه ایجاد کرده ام که از طریق صفحه اول (Register.Xaml) جزئیات دانشجو ثبت می شود و در صفحه دوم (StudentList.Xaml) لیست دانشجویان اضافه شده نمایش داده می شوند.

در ادامه نمایی از کد را در Register.xaml و Register.xaml.cs مشاهده می کنید.

آموزش Xamarin

آموزش Xamarin

و در تصاویر زیر کدهای StudentList.xaml و StudentList.xaml.cs را مشاهده می کنید.


آموزش Xamarin


آموزش Xamarin

در صورت اجرای موفقیت آمیز برنامه در WindowsPhone، صفحه زیر را مشاهده خواهید کرد:


آموزش Xamarin

آموزش Xamarin

 

 

1394/10/07 3539 1201
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...