Press ESC to close

Xamarin Localde Veri Saklamak ( SQLite )

Mobil uygulamalarınız küçük çapta olabilir. Sadece localde verilerinizi saklamak isteyebilirsiniz veya hem bulutta saklarken hem de local bir yerde saklamak isteyebilirsiniz. Bunun için Xamarin yine bize bunu çok kolay bir şekilde sunuyor.

Her zaman ki gibi ilk önce projemizi oluşturuyoruz. Ben portable seçiyorum. Sonrasında yapacağımız ilk iş Xamarin.Forms paketini güncellemek oluyor. Güncelledikten sonra projeyi clean edip rebuild ediyoruz.  Yine paketler kısmına gelip Sqlite.net-pcl paketini bütün katmanlarımıza yüklüyoruz. Yükleme işlemleri bittikten sonra her platformda ayrı ayrı bağlantı yapmamız gerekiyor. Bunu da dependency services ile yapabiliyoruz. Zaten önceki yazılarımda da mevcut.  Bunun için ilk önce portable katmanında bir interface oluşturuyoruz.  Sonrasında her platform için bir sınıf oluşturuyoruz bağlantı bilgilerini almak için.

Android platformundan başlayalım. Burada ilk önce bir bağlantı yolu oluşturmam gerek. Bir sınıf açıp onu portable kısmında oluşturduğumuz interfaceden kalıtım almamız gerekiyor. Kalıtım alıp implemente ettikten sonra bağlantı oluşturmamız lazım. Bir bağlantı oluşturmak için ise hangi platformda olduğunu belirtmemiz ve hangi yolu kullanacağımızı söylememiz gerekiyor. Yol verirken de yolu veri tabanımızın adıyla kombine etmemiz gerekiyor. Her platform için ayrı ayrı veri tabanı ismi oluşturmak yerine App sınıfında bir isim tanımlıyorum ve bunu kombinliyorum. İlk önce yolu belirtiyorum. Ardından android platformunda çalışacağım için onu da bir değişkene atayıp bağlantımıza veriyoruz. Bu bağlantıyı da son olarak fonksiyonda döndürüyoruz. Bu sınıfın bir Dependency olduğunu da belirtip şu anlık burada işimizi bitiriyoruz.

using SQLite.Net;
using SQLite.Net.Platform.XamarinAndroid;
using VeriTabani.Droid;

[assembly: Xamarin.Forms.Dependency(typeof(DroidBaglantisi))]
namespace VeriTabani.Droid
{
    public class DroidBaglantisi : SqlConnection
    {
        public SQLiteConnection BaglantiyiAl()
        {
            string yol = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            var yol2 = System.IO.Path.Combine(yol, App.VTAdi);
            var platform = new SQLitePlatformAndroid();

            var baglanti = new SQLiteConnection(platform, yol2);
            return baglanti;
        }
    }
}

Bağlantıyı oluşturduktan sonra hangi obje üzerinde veri tabanı işlemlerini yapmak istiyorsak ona göre bir model oluşturuyoruz. Bu model de Sqlite’ın özelliklerini de kullanabiliyoruz. Primary Key gibi , otomatik artması gibi özellikler.  Ben bir kullanıcı modeli oluşturup buna göre işlemler yapacağım.

using SQLite.Net.Attributes;
using System;

namespace VeriTabani
{
    public class Kullanici
    {
        [PrimaryKey,AutoIncrement]
        public int ID { get; set; }
        public string Ad { get; set; }
        public string Soyad { get; set; }
        public DateTime KayitTarihi { get; set; }

    }
}

Veri tabanımızın üzerinde ekleme , silme , güncelleme , okuma gibi işlemleri yapmamız için bir yönetici sınıfa ihtiyacımız var. Bunu portable katmanında açıp işlemlerimizi yazıyorum. Buradan alınan nesne ile her türlü işlemlerinizi yapabilirsiniz.

using SQLite.Net;
using System.Collections.Generic;
using Xamarin.Forms;

namespace VeriTabani
{
    public class Yonetici
    {
        SQLiteConnection veritabaniBaglantisi;
        public Yonetici()
        {
            veritabaniBaglantisi = DependencyService.Get<SqlConnection>().BaglantiyiAl();
            veritabaniBaglantisi.CreateTable<Kullanici>();
        }
        public int Kaydet(Kullanici model)
        {
            return veritabaniBaglantisi.Insert(model);
        }

        public int Guncelle(Kullanici model)
        {
            return veritabaniBaglantisi.Update(model);
        }
        public int Sil(Kullanici model)
        {
            // Birden fazla talo olabilir bu yüzden hangi tablodaysa ona göre belirtmemiz gerekiyor.
            return veritabaniBaglantisi.Delete<Kullanici>(model);
        }
        public IEnumerable<Kullanici> Listele()
        {
            return veritabaniBaglantisi.Table<Kullanici>();
        }
        public Kullanici Getir(int ID)
        {
            return veritabaniBaglantisi.Table<Kullanici>().Where(x => x.ID == ID).FirstOrDefault();
        }

        public void Kapat()
        {
            veritabaniBaglantisi.Dispose();
        }
    }
}

Eğer bir sorunuz olursa mail atabilir veya yorum şeklinde yazabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir