SQLite ile verileri yerel olarak depolama
SQLite, ilişkisel verileriniz olduğunda kullanışlıdır. Bir sosyal medya uygulaması oluşturduğunuzu varsayalım. Uygulamaya abone olanlarla ilgili bilgileri depolamanız gerekir. Bu veriler, her kullanıcı ve adı için benzersiz bir kimlik içerir. SQLite veritabanında bu tür bir ilişkiyi kolayca modelleyebilirsiniz.
Bu ünitede, SQLite-net kullanarak bir .NET MAUI uygulamasında SQLite kullanmayı öğreneceksiniz.
SQLite nedir?
SQLite, mobil uygulamalar için endüstri standardı haline gelen basit bir platformlar arası yerel veritabanıdır. SQLite için sunucu gerekmez. Veritabanı, cihazın dosya sistemindeki tek bir disk dosyasında depolanır. Tüm okuma ve yazma işlemleri doğrudan SQLite disk dosyasında çalıştırılır.
SQLite yerel kitaplıkları varsayılan olarak Android ve iOS'ta yerleşiktir; ancak altyapı yalnızca C/C++ API'sini destekler. Bu senaryo, SQLite ve .NET'in etkileşim kurması için bir yol arayan .NET geliştiricileri için ideal değildir.
SQLite-net nedir?
.NET geliştiricilerinin kullanabileceği yerel SQLite altyapısı çevresinde birkaç C# sarmalayıcı vardır. Birçok .NET geliştiricisi SQLite-net adlı popüler bir C# sarmalayıcı kullanır.
SQLite-net, nesne-ilişkisel eşleyicidir. Şema olarak hizmet vermek için projelerinizde tanımlanan modelleri kullanmanıza izin vererek veritabanı şemalarını tanımlama işlemini basitleştirmeye yardımcı olur.
Örneğin, bir User
modelleyen aşağıdaki sınıfı göz önünde bulundurun:
class User
{
public int Id { get; set; }
public string Username { get; set; }
...
}
Nesne ilişkisel eşleyici kullanarak bu ilk User
sınıfı alabilir ve bu sınıftaki ve Username
alanları için Id
sütunları olan adlı User
bir veritabanı tablosu oluşturabilirsiniz.
SQLite-net bir NuGet paketi olarak gönderilir. Kullanmak için uygulamalarınıza sqlite-net-pcl paketini eklemeniz gerekir. Visual Studio'da NuGet paket yöneticisini kullanın. Ayrıca, Bir uygulamayı Android'de çalıştırmak istiyorsanız, SQLitePCLRaw.provider.dynamic_cdecl paketini de eklemeniz gerekir.
SQLite veritabanına bağlanma
Bir nesne aracılığıyla SQLiteConnection
bir uygulamadan SQLite veritabanına bağlantı kurabilirsiniz. Bu sınıf, SQLite'in SQLite
sağladığı diğer tür ve yöntemlerle birlikte ad alanında tanımlanır. Bu nesnenin örneğini oluştururken, veritabanı dosyasının dosya adını geçirirsiniz. Oluşturucu, varsa dosyayı açar veya yoksa oluşturur.
Aşağıdaki kodda bir örnek gösterilir:
using SQLite;
...
string filename = ...
SQLiteConnection conn = new SQLiteConnection(filename);
Bunun uygulama korumalı alanında bir konuma işaret etmesi filename
gerektiğini unutmayın.
Tablo oluşturma
SQLite-net'in nesne-ilişkisel eşleyici olduğunu hatırlayın. Bu, veritabanı şemanızı C# sınıflarından oluşturabileceğiniz anlamına gelir. SQLite-net sıradan bir C# sınıfından veritabanı tablosu oluşturabilir, ancak ek meta veriler sağlamak için bir sınıfa ekleyebileceğiniz birçok öznitelik vardır. Bu meta veriler SQLite'in benzersizlik gibi özellikleri zorunlu kılmasına ve verilerinize kısıtlamalar uygulamasına yardımcı olur.
Kullanılabilir öznitelikler şunlardır:
Table
: Sınıfın adından farklı bir şey olmasını istiyorsanız tablonun adını belirtinPrimaryKey
: Sütunun birincil anahtar olduğunu belirtinAutoIncrement
: Yeni bir satır eklendiğinde sütunun otomatik olarak değer olarak artması gerektiğini belirtinColumn
: Özellik adından farklı bir şey olmasını istiyorsanız sütunun adını belirtinMaxLength
: Sütunda kullanılabilecek en fazla karakter sayısını belirtinUnique
: Sütundaki değerin diğer tüm satırlardan benzersiz olması gerektiğini belirtin
Aşağıdaki kod, sınıfın User
bu öznitelikleri uygulayan güncelleştirilmiş bir sürümünü gösterir:
[Table("user")]
public class User
{
// PrimaryKey is typically numeric
[PrimaryKey, AutoIncrement, Column("_id")]
public int Id { get; set; }
[MaxLength(250), Unique]
public string Username { get; set; }
...
}
C# sınıfınızı tanımladıktan sonra veritabanında tablo oluşturmak için sınıfında genel yöntemini SQLiteConnection
çağırınCreateTable
. tür parametresi olarak sınıfını belirtin. Bir örnek aşağıda verilmiştir:
SQLiteConnection conn = new SQLiteConnection(filename);
conn.CreateTable<User>();
Tablo veritabanında zaten varsa, CreateTable
yöntem herhangi bir değişiklik olup olmadığını görmek için şemayı denetler. Varsa, işlem veritabanı şemasını güncelleştirmeye çalışır.
Temel okuma ve yazma işlemlerini yapma
Tablo oluşturduktan sonra, tabloyla etkileşim kurmaya başlayabilirsiniz. Satır eklemek için örnekte yöntemini Insert
SQLiteConnection
kullanın ve eklenecek verileri tutan uygun türde bir nesne sağlayın. Aşağıdaki kod tabloya nasıl yeni satır User
ekleneceğini gösterir:
public int AddNewUser(User user)
{
int result = conn.Insert(user);
return result;
}
yöntemi, Insert
tabloya eklenen satır sayısını temsil eden bir int
döndürür. Bu durumda, bu sayı birdir.
Tablodan satır almak için yöntemini kullanın Table
. Bu yöntem bir nesne koleksiyonu döndürür (boş olabilir):
public List<User> GetAllUsers()
{
List<User> users = conn.Table<User>().ToList();
return users;
}
Table
metodu bir TableQuery\<T>
nesnesi döndürür. almak List
için yukarıdaki örnekte gösterildiği gibi yöntemini kullanın ToList
.
LINQ kullanarak SQLite sorgusu yürütme
Table
yöntemi bir tablodan tüm satırları alır. Çoğu durumda, belirtilen ölçüt kümesiyle eşleşen satırların yalnızca bir alt kümesini döndürmek istersiniz. Bu görevler için SQLite-net ile LINQ kullanın.
SQLite-net aşağıdakiler dahil olmak üzere birçok yaygın LINQ sorgularını destekler:
- Konumu
- Take
- Atla
- OrderBy
- Orderbydescending
- Thenby
- ElementAt
- First
- Firstordefault
- Thenbydescending
- Sayı
Bu yöntemlerle, uzantı yöntemi söz dizimini veya LINQ C# söz dizimini kullanabilirsiniz. Örneğin, aşağıda belirtilen kullanıcının ayrıntılarını almanıza olanak tanıyan bir kod parçacığı verilmiştir:
public User GetByUsername(string username)
{
var user = from u in conn.Table<User>()
where u.Username == username
select u;
return user.FirstOrDefault();
}
Satırları güncelleştirme ve silme
Nesnenin SQLiteConnection
Update
yöntemini kullanarak bir satırı güncelleştirirsiniz. Yeni değerleriyle güncelleştirilecek satırı tanımlayan bir nesne sağlarsınız. yöntemi, Update
sağlanan nesneyle aynı birincil anahtar değerine sahip olan satırı değiştirir. Döndürülen değer, değiştirilen satır sayısıdır. Bu değer sıfırsa eşleşen birincil anahtara sahip satır bulunamadı ve hiçbir şey güncelleştirilmedi. Sonraki kod parçacığı şu yöntemin çalıştığını gösterir:
public int UpdateUser(User user)
{
int result = 0;
result = conn.Update(user);
return result;
}
Nesnenin Delete
yöntemiyle bir tablodan SQLiteConnection
satırları kaldırın. Bu yöntemin en basit biçimi, aşağıdaki örnekte gösterildiği gibi parametre olarak silinecek öğenin birincil anahtarını alır. Yöntemin Delete
bu biçimi geneldir ve bir tür parametresi gerektirir. Döndürülen değer, tablodan kaldırılan satır sayısıdır:
public int DeleteUser(int userID)
{
int result = 0;
result = conn.Delete<User>(userID);
return result;
}