Ви можете використовувати цю бібліотеку в Swift для SQLite
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
Демонстрація SQLite за допомогою Swift із класом SQLDataAccess, написаним у Swift
Додавання до вашого проекту
Вам потрібно лише три файли, щоб додати до свого проекту * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header повинен бути встановлений у проекті Xkod 'Objective-C Bridging Header' у розділі 'Swift Compiler - General'
Приклади для використання
Просто дотримуйтесь коду в ViewController.swift, щоб побачити, як писати простий SQL за допомогою SQLDataAccess.swift Спочатку потрібно відкрити базу даних SQLite, з якою ви маєте справу
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
Якщо openConnection вдався, тепер ви можете зробити просту вставку в 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)")
}
Подивіться, як це було просто!
Першим терміном в db.executeStatement є ваш SQL як String, всі наведені нижче терміни - це різноманітний список аргументів типу Any, і це ваші параметри в масиві. Усі ці терміни розділені комами у вашому списку аргументів SQL. Ви можете вводити рядки, цілі числа, дату та краплі відразу після заяви продовження, оскільки всі ці умови вважаються параметрами для продовження. Різноманітний масив аргументів просто дозволяє зручно вводити все ваше продовження лише в одному виклику ExecuteStatement або getRecordsForQuery. Якщо у вас немає параметрів, не вводите нічого після свого SQL.
Масив результатів - це масив словника, де "ключ" - це ім'я стовпця таблиці, а "значення" - ваші дані, отримані від SQLite. Ви можете легко повторити цей масив за допомогою циклу for або передрукувати його безпосередньо або призначити ці елементи словника власним класам об'єктів даних, які ви використовуєте у своїх контролерах перегляду для споживання моделі.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess буде зберігати, текст, подвійний, плаваючий, краплинний, дата, ціле число та довгі довгі цілі числа. Для Blobs ви можете зберігати двійкові, варбінарні, blob.
У тексті ви можете зберігати char, персонаж, clob, національний мінливий персонаж, нативний персонаж, nchar, nvarchar, varchar, варіант, змінюючий символ, текст.
Для дат ви можете зберігати дату, час, позначку часу, дату.
Для Integers ви можете зберігати bigint, bit, bool, boolean, int2, int8, integer, mediumint, smallint, tinyint, int.
Для парних пар можна зберігати десяткову, подвійну точність, поплавок, числовий, реальний, подвійний. Подвійна має найбільшу точність.
Можна навіть зберігати Nulls типу Null.
У ViewController.swift робиться більш складний приклад, що показує, як вставити словник як "Blob". Крім того, SQLDataAccess розуміє нативну дату Swift (), тому ви можете вставити ці об'єкти з конвертуванням, і вони перетворять їх у текст і зберігатимуть їх, а при отриманні перетворюватимуть їх назад із тексту в дату.
Звичайно, реальна сила SQLite - це можливість транзакцій. Тут ви можете буквально встановити чергу до 400 операторів SQL з параметрами та вставити їх усі відразу, що є дуже потужним, оскільки це так швидко. ViewController.swift також показує вам приклад того, як це зробити. Все, що ви насправді робите, - це створити масив словників під назвою 'sqlAndParams', в цьому масиві зберігати словники з двома ключами 'SQL' для подальшого оператора або запиту String і 'PARAMS' - це лише масив нативних об'єктів SQLite розуміє для цього запиту. Кожен 'sqlParams', який є індивідуальним словником подальшого запиту плюс параметри, зберігається у масиві 'sqlAndParams'. Після створення цього масиву ви просто дзвоните.
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)")
}
Крім того, всі методи ExecuteStatement і getRecordsForQuery можна виконати за допомогою простого String для запиту SQL та масиву для параметрів, необхідних для запиту.
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)")
}
Версія Objective-C також існує і називається тим самим SQLDataAccess, тому тепер ви можете вибрати своє продовження в Objective-C або Swift. Крім того, SQLDataAccess також буде працювати з SQLCipher, нинішній код ще не налаштований, щоб працювати з ним, але це зробити досить просто, а приклад того, як це зробити, є насправді у версії SQLDataAccess Objective-C.
SQLDataAccess - це дуже швидкий і ефективний клас, і його можна використовувати замість CoreData, який дійсно просто використовує SQLite, оскільки він є базовим сховищем даних без усіх помилок цілісності основних даних CoreData, які виникають із CoreData.