Aracılığıyla paylaş


Xamarin.iOS ile SQLite.NET kullanma

Xamarin'in önerdiği SQLite.NET kitaplığı, yerel SQLite veritabanındaki nesneleri bir iOS cihazında depolamanıza ve almanıza olanak tanıyan temel bir ORM'dir. ORM, SQL deyimleri yazmadan bir veritabanından "nesneleri" kaydetmenizi ve almanızı sağlayan bir API olan Nesne İlişkisel Eşleme anlamına gelir.

Kullanım

SQLite.NET kitaplığını bir Xamarin uygulamasına eklemek için projenize aşağıdaki NuGet paketini ekleyin:

NuGet paketini SQLite.NET

Kullanılabilir birçok farklı SQLite paketi vardır. Doğru SQLite paketini seçtiğinizden emin olun (aramada en önemli sonuç olmayabilir).

Önemli

SQLite.NET, praeclarum/sqlite-net deposunda desteklenen bir üçüncü taraf kitaplığıdır.

SQLite.NET kitaplığını kullanılabilir duruma getirin, veritabanına erişmek için bu kitaplığı kullanmak için şu üç adımı izleyin:

  1. Using deyimi ekleme - Veri erişiminin gerekli olduğu C# dosyalarına aşağıdaki deyimi ekleyin:

    using SQLite;
    
  2. Boş Veritabanı Oluşturma - SQLiteConnection sınıf oluşturucusunun dosya yolu geçirilerek veritabanı başvurusu oluşturulabilir. Dosyanın zaten var olup olmadığını denetlemeniz gerekmez; gerekirse otomatik olarak oluşturulur, aksi takdirde mevcut veritabanı dosyası açılır.

    var db = new SQLiteConnection (dbPath);
    

    dbPath değişkeni, bu belgenin önceki bölümlerinde açıklanan kurallara göre belirlenmelidir.

  3. Verileri Kaydet - Bir SQLiteConnection nesnesi oluşturduktan sonra, veritabanı komutları CreateTable ve Insert gibi yöntemleri çağrılarak yürütülür:

    db.CreateTable<Stock> ();
    db.Insert (newStock); // after creating the newStock object
    
  4. Veri Alma - Bir nesneyi (veya nesne listesini) almak için aşağıdaki söz dizimini kullanın:

    var stock = db.Get<Stock>(5); // primary key id of 5
    var stockList = db.Table<Stock>();
    

Temel Veri Erişimi Örneği

Bu belgenin DataAccess_Basic örnek kodu iOS üzerinde çalışırken aşağıdakine benzer. Kod, basit SQLite.NET işlemlerinin nasıl gerçekleştiriltiğini gösterir ve sonuçları uygulamanın ana penceresinde metin olarak gösterir.

iOS

iOS SQLite.NET örneği

Aşağıdaki kod örneği, temel alınan veritabanı erişimini kapsüllemek için SQLite.NET kitaplığını kullanan tüm veritabanı etkileşimini gösterir. Şunları gösterir:

  1. Veritabanı dosyası oluşturma
  2. Nesneleri oluşturup kaydederek veri ekleme
  3. Veriyi sorgulama

Şu ad alanlarını eklemeniz gerekir:

using SQLite; // from the github SQLite.cs class

Bu, burada vurgulandığı gibi projenize SQLite eklemenizi gerektirir. SQLite veritabanı tablosunun CREATE TABLE komutu yerine sınıfa ( Stock sınıf) öznitelikler eklenerek tanımlandığını unutmayın.

[Table("Items")]
public class Stock {
    [PrimaryKey, AutoIncrement, Column("_id")]
    public int Id { get; set; }
    [MaxLength(8)]
    public string Symbol { get; set; }
}
public static void DoSomeDataAccess () {
       Console.WriteLine ("Creating database, if it doesn't already exist");
   string dbPath = Path.Combine (
        Environment.GetFolderPath (Environment.SpecialFolder.Personal),
        "ormdemo.db3");
   var db = new SQLiteConnection (dbPath);
   db.CreateTable<Stock> ();
   if (db.Table<Stock> ().Count() == 0) {
        // only insert the data if it doesn't already exist
        var newStock = new Stock ();
        newStock.Symbol = "AAPL";
        db.Insert (newStock);
        newStock = new Stock ();
        newStock.Symbol = "GOOG";
        db.Insert (newStock);
        newStock = new Stock ();
        newStock.Symbol = "MSFT";
        db.Insert (newStock);
    }
    Console.WriteLine("Reading data");
    var table = db.Table<Stock> ();
    foreach (var s in table) {
        Console.WriteLine (s.Id + " " + s.Symbol);
    }
}

Özniteliğinin [Table] tablo adı parametresi belirtmeden kullanılması, temel alınan veritabanı tablosunun sınıfla aynı ada (bu örnekte "Hisse Senedi") sahip olmasına neden olur. ORM veri erişim yöntemlerini kullanmak yerine doğrudan veritabanına SQL sorguları yazarsanız gerçek tablo adı önemlidir. Benzer şekilde [Column("_id")] özniteliği isteğe bağlıdır ve yoksa tabloya sınıfındaki özelliğiyle aynı ada sahip bir sütun eklenir.

SQLite Öznitelikleri

Temel alınan veritabanında nasıl depolandıklarını denetlemek için sınıflarınıza uygulayabileceğiniz yaygın öznitelikler şunlardır:

  • [PrimaryKey] – Bu öznitelik, temel alınan tablonun birincil anahtarı olmaya zorlamak için bir integer özelliğine uygulanabilir. Bileşik birincil anahtarlar desteklenmez.
  • [AutoIncrement] – Bu öznitelik, veritabanına eklenen her yeni nesne için bir tamsayı özelliğinin değerinin otomatik olarak artırmasına neden olur
  • [Sütun(ad)] – parametresi, name temel alınan veritabanı sütununun adını ayarlar.
  • [Tablo(ad)] – Sınıfı, belirtilen adla temel alınan bir SQLite tablosunda depolanabilecek şekilde işaretler.
  • [MaxLength(değer)] – Veritabanı ekleme denendiğinde metin özelliğinin uzunluğunu kısıtlayın. Bu öznitelik yalnızca bir veritabanı ekleme veya güncelleştirme işlemi denendiğinde 'işaretlenir' olduğundan, kod tüketilirken nesne eklenmadan önce bu doğrulanmalıdır.
  • [Yoksay] – SQLite.NET bu özelliği yoksaymalarına neden olur. Bu özellikle veritabanında depolanamayan bir türe sahip özellikler için veya otomatik olarak çözümlenemeyen koleksiyonları modelleyen özellikler SQLite olduğunda kullanışlıdır.
  • [Benzersiz] – Temel alınan veritabanı sütunundaki değerlerin benzersiz olmasını sağlar.

Bu özniteliklerin çoğu isteğe bağlıdır. Seçim ve silme sorgularının verileriniz üzerinde verimli bir şekilde gerçekleştirilebilmesi için her zaman bir tamsayı birincil anahtarı belirtmeniz gerekir.

Daha Karmaşık Sorgular

üzerinde aşağıdaki yöntemler SQLiteConnection diğer veri işlemlerini gerçekleştirmek için kullanılabilir:

  • Insert : Veritabanına yeni bir nesne ekler.
  • Get<T> : Birincil anahtarı kullanarak bir nesneyi almaya çalışır.
  • Tablo T> : Tablodaki<tüm nesneleri döndürür.
  • Delete : Birincil anahtarını kullanarak bir nesneyi siler.
  • Sorgu<T> - Bir dizi satır (nesne olarak) döndüren bir SQL sorgusu gerçekleştirin.
  • Execute – SQL'den satır beklemediğinizde (INSERT, UPDATE ve DELETE yönergeleri gibi) bu yöntemi ( Query değil) kullanın.

Birincil anahtara göre nesne alma

SQLite.Net, birincil anahtarına göre tek bir nesneyi almak için Get yöntemini sağlar.

var existingItem = db.Get<Stock>(3);

Linq kullanarak nesne seçme

Koleksiyon döndüren yöntemler IEnumerable<T'yi> destekler, böylece tablonun içeriğini sorgulamak veya sıralamak için Linq kullanabilirsiniz. Aşağıdaki kodda, "A" harfiyle başlayan tüm girişleri filtrelemek için Linq kullanan bir örnek gösterilmektedir:

var apple = from s in db.Table<Stock>()
    where s.Symbol.StartsWith ("A")
    select s;
Console.WriteLine ("-> " + apple.FirstOrDefault ().Symbol);

SQL kullanarak nesne seçme

SQLite.Net verilerinize nesne tabanlı erişim sağlayabilse de, bazen Linq'in izin verdiğinden daha karmaşık bir sorgu yapmanız gerekebilir (veya daha hızlı performansa ihtiyacınız olabilir). Burada gösterildiği gibi Sorgu yöntemiyle SQL komutlarını kullanabilirsiniz:

var stocksStartingWithA = db.Query<Stock>("SELECT * FROM Items WHERE Symbol = ?", "A");
foreach (var s in stocksStartingWithA) {
    Console.WriteLine ("a " + s.Symbol);
}

Önemli

SQL deyimlerini doğrudan yazarken, veritabanınızdaki sınıflarınızdan ve özniteliklerinden oluşturulan tablo ve sütunların adlarına bağımlılık oluşturursunuz. Kodunuzda bu adları değiştirirseniz el ile yazılmış SQL deyimlerini güncelleştirmeyi unutmamanız gerekir.

Nesne silme

Birincil anahtar, burada gösterildiği gibi satırı silmek için kullanılır:

var rowcount = db.Delete<Stock>(someStock.Id); // Id is the primary key

Etkilenen satır sayısını onaylamak için (bu durumda silindi) seçeneğini de kontrol rowcount edebilirsiniz.

Birden Çok İş Parçacığıyla SQLite.NET Kullanma

SQLite üç farklı iş parçacığı modunu destekler: Tek iş parçacığı, Çok iş parçacığı ve Serileştirilmiş. Veritabanına herhangi bir kısıtlama olmadan birden çok iş parçacığından erişmek istiyorsanız, SQLite'i Serileştirilmiş iş parçacığı modunu kullanacak şekilde yapılandırabilirsiniz. Bu modu uygulamanızda erken ayarlamak önemlidir (örneğin, yöntemin OnCreate başında).

İş parçacığı modunu değiştirmek için ad alanında bulunan öğesini çağırın SqliteConnection.SetConfig Mono.Data.Sqlite . Örneğin, bu kod satırı Serileştirilmiş mod için SQLite'i yapılandırıyor :

using Mono.Data.Sqlite;
...
SqliteConnection.SetConfig(SQLiteConfig.Serialized);