Puoi utilizzare questa libreria in Swift per SQLite
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
SQLite Demo utilizzando Swift con la classe SQLDataAccess scritta in Swift
Aggiunta al tuo progetto
Hai solo bisogno di tre file da aggiungere al tuo progetto * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header deve essere impostato nel tuo progetto Xcode 'Objective-C Bridging Header' sotto 'Swift Compiler - General'
Esempi di utilizzo
Segui semplicemente il codice in ViewController.swift per vedere come scrivere un semplice SQL con SQLDataAccess.swift Per prima cosa devi aprire il database SQLite con cui hai a che fare
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
Se openConnection ha avuto successo, ora puoi eseguire un semplice inserimento in Table AppInfo
//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)")
}
Guarda com'è stato semplice!
Il primo termine in db.executeStatement è il tuo SQL come String, tutti i termini che seguono sono un elenco di argomenti variadici di tipo Any e sono i tuoi parametri in un Array. Tutti questi termini sono separati da virgole nell'elenco degli argomenti SQL. È possibile immettere stringhe, numeri interi, date e BLOB subito dopo l'istruzione sequel poiché tutti questi termini sono considerati parametri per il sequel. L'array di argomenti variadic semplifica l'inserimento di tutto il sequel in una sola chiamata executeStatement o getRecordsForQuery. Se non hai parametri, non inserire nulla dopo il tuo SQL.
L'array dei risultati è un array di Dictionary dove la "chiave" è il nome della colonna delle tabelle e il "valore" è i dati ottenuti da SQLite. È possibile iterare facilmente attraverso questo array con un ciclo for o stamparlo direttamente o assegnare questi elementi del dizionario alle classi di oggetti dati personalizzati che si utilizzano nei controller di visualizzazione per l'utilizzo del modello.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess memorizzerà, text, double, float, blob, date, integer e long long interi. Per i BLOB è possibile archiviare binary, varbinary, blob.
Per il testo è possibile memorizzare char, carattere, clob, carattere variabile nazionale, carattere nativo, nchar, nvarchar, varchar, variante, carattere variabile, testo.
Per le date è possibile memorizzare datetime, time, timestamp, date.
Per i numeri interi è possibile memorizzare bigint, bit, bool, boolean, int2, int8, integer, mediumint, smallint, tinyint, int.
Per i doppi puoi memorizzare decimale, doppia precisione, float, numerico, reale, doppio. Double ha la massima precisione.
Puoi anche memorizzare Null di tipo Null.
In ViewController.swift viene eseguito un esempio più complesso che mostra come inserire un dizionario come "Blob". Inoltre SQLDataAccess comprende Swift Date () nativo, quindi puoi inserire questi oggetti senza convertirli e li convertirà in testo e li memorizzerà e, una volta recuperati, li convertirà di nuovo da testo a Date.
Ovviamente il vero potere di SQLite è la sua capacità di transazione. Qui puoi letteralmente mettere in coda 400 istruzioni SQL con parametri e inserirle tutte in una volta, il che è davvero potente poiché è così veloce. ViewController.swift mostra anche un esempio di come farlo. Tutto quello che stai facendo è creare un array di dizionari chiamato 'sqlAndParams', in questo array i tuoi dizionari di archiviazione con due chiavi 'SQL' per l'istruzione o query sequel String e 'PARAMS' che è solo un array di oggetti nativi SQLite capisce per quella query. Ogni 'sqlParams', che è un dizionario individuale di query sequel più parametri, viene quindi memorizzato nell'array 'sqlAndParams'. Dopo aver creato questo array, devi solo chiamare.
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)")
}
Inoltre, tutti i metodi executeStatement e getRecordsForQuery possono essere eseguiti con una semplice query String per SQL e un array per i parametri richiesti dalla query.
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)")
}
Esiste anche una versione Objective-C e si chiama lo stesso SQLDataAccess, quindi ora puoi scegliere di scrivere il tuo sequel in Objective-C o Swift. Inoltre SQLDataAccess funzionerà anche con SQLCipher, il codice attuale non è ancora configurato per funzionare con esso, ma è abbastanza facile da fare, e un esempio di come farlo è in realtà nella versione Objective-C di SQLDataAccess.
SQLDataAccess è una classe molto veloce ed efficiente e può essere utilizzata al posto di CoreData che in realtà utilizza solo SQLite come archivio dati sottostante senza tutti gli arresti anomali di integrità dei dati core CoreData che vengono con CoreData.