Vous pouvez utiliser cette bibliothèque dans Swift pour SQLite
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
Démonstration SQLite utilisant Swift avec la classe SQLDataAccess écrite en Swift
Ajout à votre projet
Vous n'avez besoin que de trois fichiers à ajouter à votre projet * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header doit être défini dans votre projet Xcode 'Objective-C Bridging Header' sous 'Swift Compiler - General'
Exemples d'utilisation
Suivez simplement le code dans ViewController.swift pour voir comment écrire du SQL simple avec SQLDataAccess.swift Vous devez d'abord ouvrir la base de données SQLite avec laquelle vous traitez
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
Si openConnection réussit, vous pouvez maintenant faire une simple insertion dans 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)")
}
Voyez comme c'était simple!
Le premier terme de db.executeStatement est votre SQL sous forme de chaîne, tous les termes qui suivent sont une liste d'arguments variadiques de type Any et sont vos paramètres dans un tableau. Tous ces termes sont séparés par des virgules dans votre liste d'arguments SQL. Vous pouvez entrer des chaînes, des entiers, des dates et des objets blob juste après l'instruction de suite, car tous ces termes sont considérés comme des paramètres de la suite. Le tableau d'arguments variadiques permet simplement de saisir toute votre suite en un seul appel executeStatement ou getRecordsForQuery. Si vous n'avez aucun paramètre, n'entrez rien après votre SQL.
Le tableau de résultats est un tableau de dictionnaires où la «clé» est le nom de la colonne de votre table et la «valeur» est vos données obtenues à partir de SQLite. Vous pouvez facilement parcourir ce tableau avec une boucle for ou l'imprimer directement ou affecter ces éléments Dictionary à des classes d'objets de données personnalisées que vous utilisez dans vos contrôleurs d'affichage pour la consommation de modèles.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess stockera, texte, double, flottant, blob, date, entier et longs entiers longs. Pour les objets blob, vous pouvez stocker des objets binaires, varbinary, blob.
Pour le texte, vous pouvez stocker char, caractère, clob, caractère variant national, caractère natif, nchar, nvarchar, varchar, variante, caractère variable, texte.
Pour les dates, vous pouvez stocker la date, l'heure, l'horodatage et la date.
Pour les entiers, vous pouvez stocker bigint, bit, bool, boolean, int2, int8, integer, mediumint, smallint, tinyint, int.
Pour les doubles, vous pouvez stocker des nombres décimaux, double précision, flottants, numériques, réels, doubles. Double a le plus de précision.
Vous pouvez même stocker des Nulls de type Null.
Dans ViewController.swift, un exemple plus complexe montre comment insérer un dictionnaire en tant que «Blob». En outre, SQLDataAccess comprend la date Swift native () afin que vous puissiez insérer ces objets sans conversion, et il les convertira en texte et les stockera, et une fois récupérés, les reconvertira du texte en date.
Bien sûr, la vraie puissance de SQLite est sa capacité de transaction. Ici, vous pouvez littéralement mettre en file d'attente 400 instructions SQL avec des paramètres et les insérer toutes en même temps, ce qui est vraiment puissant car c'est si rapide. ViewController.swift vous montre également un exemple de la façon de procéder. Tout ce que vous faites vraiment est de créer un tableau de dictionnaires appelé 'sqlAndParams', dans ce tableau, vos dictionnaires de stockage avec deux clés 'SQL' pour l'instruction ou la requête String sequel, et 'PARAMS' qui est juste un tableau d'objets natifs SQLite comprend pour cette requête. Chaque 'sqlParams' qui est un dictionnaire individuel de la requête de suite et des paramètres est ensuite stocké dans le tableau 'sqlAndParams'. Une fois que vous avez créé ce tableau, il vous suffit d'appeler.
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)")
}
En outre, toutes les méthodes executeStatement et getRecordsForQuery peuvent être effectuées avec une simple String pour une requête SQL et un tableau pour les paramètres nécessaires à la requête.
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)")
}
Une version Objective-C existe également et s'appelle le même SQLDataAccess, vous pouvez donc maintenant choisir d'écrire votre suite en Objective-C ou Swift. De plus, SQLDataAccess fonctionnera également avec SQLCipher, le code actuel n'est pas encore configuré pour fonctionner avec lui, mais c'est assez facile à faire, et un exemple de la façon de le faire se trouve en fait dans la version Objective-C de SQLDataAccess.
SQLDataAccess est une classe très rapide et efficace, et peut être utilisée à la place de CoreData qui utilise vraiment juste SQLite car c'est le magasin de données sous-jacent sans tous les pannes d'intégrité des données CoreData qui accompagnent CoreData.