Sie können diese Bibliothek in Swift für SQLite
https://github.com/pmurphyjam/SQLiteDemo verwenden
SQLiteDemo
SQLite-Demo mit Swift mit in Swift geschriebener SQLDataAccess-Klasse
Hinzufügen zu Ihrem Projekt
Sie müssen Ihrem Projekt nur drei Dateien hinzufügen. * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Der Bridging-Header muss im Xcode-Projekt 'Objective-C Bridging Header' unter 'Swift Compiler - General' festgelegt werden.
Anwendungsbeispiele
Folgen Sie einfach dem Code in ViewController.swift, um zu sehen, wie Sie einfaches SQL mit SQLDataAccess.swift schreiben. Zuerst müssen Sie die SQLite-Datenbank öffnen, mit der Sie sich befassen
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
Wenn openConnection erfolgreich war, können Sie jetzt eine einfache Einfügung in Table AppInfo vornehmen
//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)")
}
Sehen Sie, wie einfach das war!
Der erste Begriff in db.executeStatement ist Ihre SQL als Zeichenfolge. Alle folgenden Begriffe sind eine Liste mit variablen Argumenten vom Typ Any und Ihre Parameter in einem Array. Alle diese Begriffe werden in Ihrer Liste der SQL-Argumente durch Kommas getrennt. Sie können direkt nach der Sequel-Anweisung Strings, Integers, Date's und Blobs eingeben, da alle diese Begriffe als Parameter für die Fortsetzung gelten. Das Array mit variablen Argumenten macht es einfach bequem, Ihre gesamte Fortsetzung in nur einem Aufruf von executeStatement oder getRecordsForQuery einzugeben. Wenn Sie keine Parameter haben, geben Sie nach Ihrem SQL nichts ein.
Das Ergebnisarray ist ein Array von Wörterbüchern, bei dem der 'Schlüssel' der Name Ihrer Tabellenspalte und der 'Wert' Ihre von SQLite erhaltenen Daten sind. Sie können dieses Array einfach mit einer for-Schleife durchlaufen oder direkt ausdrucken oder diese Dictionary-Elemente benutzerdefinierten Datenobjektklassen zuweisen, die Sie in Ihren View Controllern für den Modellverbrauch verwenden.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess speichert Text, Double, Float, Blob, Datum, Ganzzahl und lange lange Ganzzahlen. Für Blobs können Sie Binär, Varbinär, Blob speichern.
Für Text können Sie Zeichen, Zeichen, Clob, national variierendes Zeichen, natives Zeichen, nchar, nvarchar, varchar, Variante, variierendes Zeichen, Text speichern.
Für Daten können Sie Datum, Uhrzeit, Zeitstempel und Datum speichern.
Für Ganzzahlen können Sie bigint, bit, bool, boolean, int2, int8, Ganzzahl, mediumint, smallint, tinyint, int speichern.
Für Doubles können Sie Dezimalzahlen, doppelte Genauigkeit, Gleitkommazahlen, numerische Werte, reelle Zahlen und doppelte Werte speichern. Double hat die höchste Präzision.
Sie können sogar Nullen vom Typ Null speichern.
In ViewController.swift wird ein komplexeres Beispiel gezeigt, wie ein Wörterbuch als 'Blob' eingefügt wird. Darüber hinaus versteht SQLDataAccess das native Swift Date (), sodass Sie diese Objekte ohne Konvertierung einfügen können. Es konvertiert sie in Text und speichert sie. Wenn sie abgerufen werden, konvertieren Sie sie zurück von Text in Datum.
Die wahre Stärke von SQLite liegt natürlich in der Transaktionsfähigkeit. Hier können Sie buchstäblich 400 SQL-Anweisungen mit Parametern in die Warteschlange stellen und alle auf einmal einfügen, was sehr leistungsfähig ist, da es so schnell ist. ViewController.swift zeigt Ihnen auch ein Beispiel dafür. Alles, was Sie wirklich tun, ist, ein Array von Wörterbüchern mit dem Namen 'sqlAndParams' zu erstellen. In diesem Array speichern Sie Wörterbücher mit zwei Schlüsseln 'SQL' für die String-Folge-Anweisung oder -Abfrage und 'PARAMS', das nur ein Array nativer Objekte SQLite ist versteht für diese Abfrage. Jedes 'sqlParams', das ein individuelles Wörterbuch der Folgeabfrage plus Parameter ist, wird dann im 'sqlAndParams'-Array gespeichert. Sobald Sie dieses Array erstellt haben, rufen Sie einfach an.
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)")
}
Darüber hinaus können alle Methoden executeStatement und getRecordsForQuery mit einem einfachen String für SQL-Abfragen und einem Array für die von der Abfrage benötigten Parameter ausgeführt werden.
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)")
}
Es gibt auch eine Objective-C-Version, die als SQLDataAccess bezeichnet wird. Jetzt können Sie wählen, ob Sie Ihre Fortsetzung in Objective-C oder Swift schreiben möchten. Darüber hinaus funktioniert SQLDataAccess auch mit SQLCipher. Der vorliegende Code ist noch nicht eingerichtet, um damit zu arbeiten. Dies ist jedoch recht einfach. Ein Beispiel dafür finden Sie in der Objective-C-Version von SQLDataAccess.
SQLDataAccess ist eine sehr schnelle und effiziente Klasse und kann anstelle von CoreData verwendet werden, das wirklich nur SQLite als zugrunde liegenden Datenspeicher verwendet, ohne dass alle mit CoreData verbundenen CoreData-Kerndatenintegritätsfehler abstürzen.