Możesz użyć tej biblioteki w Swift dla SQLite
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
SQLite Demo przy użyciu Swift z klasą SQLDataAccess napisaną w języku Swift
Dodawanie do projektu
Potrzebujesz tylko trzech plików, aby dodać do swojego projektu * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header musi być ustawiony w projekcie Xcode „Objective-C Bridging Header” w „Swift Compiler - General”
Przykłady użycia
Po prostu postępuj zgodnie z kodem w ViewController.swift, aby zobaczyć, jak napisać prosty SQL za pomocą SQLDataAccess.swift Najpierw musisz otworzyć bazę danych SQLite, z którą masz do czynienia
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
Jeśli openConnection się powiodło, możesz teraz zrobić proste wstawienie do 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)")
}
Zobacz, jakie to proste!
Pierwszym terminem w db.executeStatement jest twój SQL jako String, wszystkie następujące terminy są listą argumentów o zmiennej liczbie argumentów typu Any i są parametrami w tablicy. Wszystkie te terminy są oddzielone przecinkami na liście argumentów SQL. Możesz wprowadzić ciągi, liczby całkowite, daty i obiekty blob bezpośrednio po instrukcji sequel, ponieważ wszystkie te terminy są uważane za parametry dla sequela. Zmienna tablica argumentów sprawia, że wygodnie jest wprowadzić cały sequel za pomocą jednego wywołania executeStatement lub getRecordsForQuery. Jeśli nie masz żadnych parametrów, nie wprowadzaj niczego po swoim SQL.
Tablica wyników jest tablicą słowników, gdzie „klucz” to nazwa kolumny tabeli, a „wartość” to dane uzyskane z SQLite. Możesz łatwo iterować tę tablicę za pomocą pętli for lub wydrukować ją bezpośrednio lub przypisać te elementy Dictionary do niestandardowych klas obiektów danych, których używasz w kontrolerach widoku do wykorzystania w modelu.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess będzie przechowywać, text, double, float, blob, Date, integer i long long integer. W przypadku obiektów blob można przechowywać pliki binarne, varbinary, blob.
W przypadku tekstu możesz przechowywać char, character, clob, narodowy znak zmienny, znak natywny, nchar, nvarchar, varchar, wariant, zmienny znak, tekst.
W przypadku dat można przechowywać datę i godzinę, godzinę, znacznik czasu, datę.
W przypadku liczb całkowitych można przechowywać bigint, bit, bool, boolean, int2, int8, integer, mediumint, smallint, tinyint, int.
W przypadku podwójnych można przechowywać dziesiętne, podwójnej precyzji, zmiennoprzecinkowe, numeryczne, rzeczywiste, podwójne. Double ma największą precyzję.
Możesz nawet przechowywać wartości Null typu Null.
W ViewController.swift przedstawiono bardziej złożony przykład pokazujący, jak wstawić słownik jako „obiekt BLOB”. Ponadto SQLDataAccess rozumie natywną datę Swift (), dzięki czemu można wstawiać te obiekty bez konwersji, konwertuje je na tekst i zapisuje, a po odzyskaniu konwertuje je z powrotem z tekstu na datę.
Oczywiście prawdziwą mocą SQLite są możliwości Transakcji. Tutaj możesz dosłownie ustawić w kolejce do 400 instrukcji SQL z parametrami i wstawić je wszystkie naraz, co jest naprawdę potężne, ponieważ jest tak szybkie. ViewController.swift pokazuje również przykład, jak to zrobić. Wszystko, co naprawdę robisz, to tworzenie tablicy słowników o nazwie `` sqlAndParams '', w tej tablicy Twoje słowniki przechowujące z dwoma kluczami `` SQL '' dla instrukcji lub zapytania sequel String oraz `` PARAMS '', które jest po prostu tablicą obiektów natywnych SQLite rozumie dla tego zapytania. Każdy „sqlParams”, który jest indywidualnym Słownikiem dalszych zapytań wraz z parametrami, jest następnie przechowywany w tablicy „sqlAndParams”. Po utworzeniu tej tablicy po prostu wywołujesz.
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)")
}
Ponadto wszystkie metody executeStatement i getRecordsForQuery można wykonać za pomocą prostego ciągu znaków dla zapytania SQL i tablicy dla parametrów wymaganych przez zapytanie.
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)")
}
Istnieje również wersja Objective-C i nazywa się ją tym samym SQLDataAccess, więc teraz możesz napisać swoją kontynuację w Objective-C lub Swift. Ponadto SQLDataAccess będzie również działał z SQLCipher, obecny kod nie jest jeszcze skonfigurowany do pracy z nim, ale jest to dość łatwe, a przykład, jak to zrobić, znajduje się w wersji SQLDataAccess Objective-C.
SQLDataAccess jest bardzo szybką i wydajną klasą i może być używana zamiast CoreData, która tak naprawdę używa SQLite, ponieważ jest to podstawowy magazyn danych bez wszystkich błędów integralności danych CoreData, które pochodzą z CoreData.