Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Xamarin'in önerdiği SQLite.NET kitaplığı, bir Android cihazındaki yerel SQLite veritabanında nesneleri kolayca depolamanıza ve almanıza olanak tanıyan çok 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.
SQLite.NET kitaplığını bir Xamarin uygulamasına eklemek için projenize aşağıdaki NuGet paketini ekleyin:
- Paket Adı: sqlite-net-pcl
- Yazar: Frank A. Krueger
- Kimlik: sqlite-net-pcl
- Url: nuget.org/packages/sqlite-net-pcl
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:
Using deyimi ekleme – Veri erişiminin gerekli olduğu C# dosyalarına aşağıdaki deyimi ekleyin:
using SQLite;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. Değişken,
dbPathbu belgenin önceki bölümlerinde açıklanan kurallara göre belirlenmelidir:var db = new SQLiteConnection (dbPath);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 objectVeri Al – 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, Android'de çalışırken aşağıdaki gibi görünür. 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.
Android

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:
Veritabanı dosyası oluşturma
Nesneleri oluşturup kaydederek veri ekleme
Veriyi sorgulama
Şu ad alanlarını eklemeniz gerekir:
using SQLite; // from the github SQLite.cs class
Sonuncusu için projenize SQLite eklemiş olmanız gerekir. 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,
nametemel 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 veya SQLite tarafından otomatik olarak çözümlenemeyen koleksiyonları modelleyen özellikler için 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 (
Querydeğ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
Bir tablonun içeriğini sorgulamak veya sıralamak için Linq kullanabilmeniz için koleksiyonları döndüren yöntemler desteklenir IEnumerable<T> . 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);
}
Not
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 öğesini çağırın SqliteConnection.SetConfig. Örneğin, bu kod satırı Serileştirilmiş mod için SQLite'i yapılandırıyor :
using using Mono.Data.Sqlite;
...
SqliteConnection.SetConfig(SQLiteConfig.Serialized);
SQLite'in Android sürümünde birkaç adım daha gerektiren bir sınırlama vardır. çağrısı SqliteConnection.SetConfig gibi library used incorrectlybir SQLite özel durumu oluşturursa aşağıdaki geçici çözümü kullanmanız gerekir:
ve
sqlite3_initializeAPI'lerinin uygulamada kullanılabilir hale getirebilmesi için yerel libsqlite.so kitaplığınasqlite3_shutdownbağlanın:[DllImport("libsqlite.so")] internal static extern int sqlite3_shutdown(); [DllImport("libsqlite.so")] internal static extern int sqlite3_initialize();Yönteminin
OnCreateen başında, SQLite'i kapatmak, Seri hale getirilmiş mod için yapılandırmak ve SQLite'i yeniden başlatmak için bu kodu ekleyin:using using Mono.Data.Sqlite; ... sqlite3_shutdown(); SqliteConnection.SetConfig(SQLiteConfig.Serialized); sqlite3_initialize();
Bu geçici çözüm kitaplık için Mono.Data.Sqlite de çalışır. SQLite ve çoklu iş parçacığı oluşturma hakkında daha fazla bilgi için bkz . SQLite ve Birden Çok İş Parçacığı.
