Bu kitaplığı Swift için SQLite https://github.com/pmurphyjam/SQLiteDemo için kullanabilirsiniz
SQLiteDemo
Swift ile Swift ile yazılmış SQLDataAccess sınıfını kullanan SQLite Demosu
Projenize Eklemek
Projenize eklemek için yalnızca üç dosyaya ihtiyacınız var * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header, Xcode projenizin 'Swift Compiler - Genel' altında 'Objective-C Bridging Header' içinde ayarlanmalıdır
Kullanım Örnekleri
SQLDataAccess.swift ile nasıl basit SQL yazılacağını görmek için ViewController.swift'teki kodu takip etmeniz yeterli.Öncelikle uğraştığınız SQLite Veritabanını açmanız gerekir.
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
OpenConnection başarılı olduysa, şimdi Table AppInfo'ya basit bir ekleme yapabilirsiniz.
//Insert into Table AppInfo
let status = db.executeStatement("insert into AppInfo (name,value,descrip,date) values(?,?,?,?)",
”SQLiteDemo","1.0.2","unencrypted",Date())
if(status)
{
//Read Table AppInfo into an Array of Dictionaries
let results = db.getRecordsForQuery("select * from AppInfo ")
NSLog("Results = \(results)")
}
Bunun ne kadar basit olduğunu görün!
Db.executeStatement içindeki ilk terim, String olarak SQL'inizdir, takip eden tüm terimler Any türünde değişken bir argüman listesidir ve bir Array'deki parametrelerinizdir. Tüm bu terimler, SQL argümanları listenizde virgülle ayrılır. Dizeler, Tamsayılar, Tarihler ve Bloblar sekans ifadesinden hemen sonra girebilirsiniz çünkü bu terimlerin tümü, devam filmi için parametreler olarak kabul edilir. Variadic argüman dizisi sadece bir executeStatement veya getRecordsForQuery çağrısında tüm devam dizinizi girmenizi kolaylaştırır. Herhangi bir parametreniz yoksa, SQL'inizden sonra hiçbir şey girmeyin.
Sonuçlar dizisi bir Sözlük Dizisidir ve burada 'anahtar' tablolar sütun adınızdır ve 'değer' ise SQLite'den elde edilen verilerinizdir. Bu diziyi bir for döngüsü ile kolayca yineleyebilir veya doğrudan yazdırabilir veya bu Sözlük öğelerini, model tüketimi için Görünüm Denetleyicilerinizde kullandığınız özel veri nesnesi Sınıflarına atayabilirsiniz.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess, text, double, float, blob, Date, integer ve long long tamsayıları depolar. Bloblar için ikili, varbinary, blob depolayabilirsiniz.
Metin için karakter, karakter, clob, ulusal değişen karakter, yerel karakter, nchar, nvarchar, varchar, varyant, değişken karakter, metin depolayabilirsiniz.
Tarihler için tarih saat, saat, zaman damgası, tarih saklayabilirsiniz.
Tamsayılar için bigint, bit, bool, boolean, int2, int8, integer, mediumint, smallint, tinyint, int depolayabilirsiniz.
Çiftler için ondalık, çift duyarlıklı, kayan, sayısal, gerçek, çift depolayabilirsiniz. Double en yüksek hassasiyete sahiptir.
Null türündeki Null'ları bile depolayabilirsiniz.
ViewController.swift'te, Sözlüğün 'Blob' olarak nasıl ekleneceğini gösteren daha karmaşık bir örnek yapılmıştır. Buna ek olarak, SQLDataAccess yerel Swift Date () 'i anlar, böylece bu nesneleri dönüştürme yapmadan ekleyebilirsiniz ve bunları metne dönüştürüp saklayacak ve geri alındığında bunları metinden Tarihe geri dönüştürecektir.
Tabii ki SQLite'ın gerçek gücü Transaction yeteneğidir. Burada tam anlamıyla parametrelerle 400 SQL ifadesini sıralayabilir ve hepsini bir kerede ekleyebilirsiniz, bu çok hızlı olduğu için gerçekten güçlüdür. ViewController.swift ayrıca bunun nasıl yapılacağına dair bir örnek gösterir. Gerçekten yaptığınız tek şey, 'sqlAndParams' adlı bir Sözlükler Dizisi oluşturmaktır, bu Dizide, String sekans ifadesi veya sorgusu için iki anahtar 'SQL' ve yalnızca yerel nesnelerden oluşan bir Dizi olan 'PARAMS' ile Sözlükleri depolamaktır. o sorgu için anlar. Ardışık sorgu artı parametrelerinin ayrı bir Sözlüğü olan her 'sqlParams' daha sonra 'sqlAndParams' Dizisinde saklanır. Bu diziyi oluşturduğunuzda, sadece arayın.
let status = db.executeTransaction(sqlAndParams)
if(status)
{
//Read Table AppInfo into an Array of Dictionaries for the above Transactions
let results = db.getRecordsForQuery("select * from AppInfo ")
NSLog("Results = \(results)")
}
Ek olarak, tüm executeStatement ve getRecordsForQuery yöntemleri SQL sorgusu için basit String ve sorgu tarafından ihtiyaç duyulan parametreler için bir Array ile yapılabilir.
let sql : String = "insert into AppInfo (name,value,descrip) values(?,?,?)"
let params : Array = ["SQLiteDemo","1.0.0","unencrypted"]
let status = db.executeStatement(sql, withParameters: params)
if(status)
{
//Read Table AppInfo into an Array of Dictionaries for the above Transactions
let results = db.getRecordsForQuery("select * from AppInfo ")
NSLog("Results = \(results)")
}
Bir Objective-C sürümü de mevcuttur ve aynı SQLDataAccess olarak adlandırılır, bu nedenle artık devam filminizi Objective-C veya Swift ile yazmayı seçebilirsiniz. Buna ek olarak SQLDataAccess, SQLCipher ile de çalışacaktır, mevcut kod henüz onunla çalışmak için kurulmamıştır, ancak yapılması oldukça kolaydır ve bunun nasıl yapılacağına dair bir örnek aslında SQLDataAccess'in Objective-C sürümündedir.
SQLDataAccess çok hızlı ve verimli bir sınıftır ve CoreData ile birlikte gelen tüm CoreData çekirdek veri bütünlüğü hatası çökmeleri olmadan temel veri deposu olduğu için gerçekten sadece SQLite kullanan CoreData yerine kullanılabilir.