Вы можете использовать эту библиотеку в Swift для SQLite
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
Демонстрация SQLite с использованием Swift с классом SQLDataAccess, написанным на Swift
Добавление в ваш проект
Вам нужно добавить только три файла в ваш проект * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header должен быть установлен в вашем проекте Xcode «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, либо распечатать его напрямую, либо назначить эти элементы Dictionary для пользовательских классов объектов данных, которые вы используете в своих контроллерах представления для потребления модели.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess будет хранить текстовые, двойные, float, blob, Date, целые и длинные длинные целые числа. Для BLOB-объектов вы можете хранить двоичные, varbinary, blob-файлы.
Для текста вы можете хранить char, character, clob, национальный переменный символ, собственный символ, nchar, nvarchar, varchar, вариант, изменяющийся символ, текст.
Для дат вы можете хранить дату и время, время, метку времени, дату.
Для целых чисел вы можете хранить bigint, bit, bool, boolean, int2, int8, integer, mediumint, smallint, tinyint, int.
Для чисел типа Double вы можете хранить десятичные числа, числа с двойной точностью, числа с плавающей запятой, числа, вещественные числа, числа с двойной точностью. Double имеет наибольшую точность.
Вы даже можете хранить значения Null типа Null.
В ViewController.swift сделан более сложный пример, показывающий, как вставить словарь как «Blob». Кроме того, SQLDataAccess понимает собственный Swift Date (), поэтому вы можете вставлять эти объекты без преобразования, он преобразует их в текст и сохраняет их, а при извлечении преобразует их обратно из текста в Date.
Конечно, настоящая сила SQLite - это возможность транзакций. Здесь вы можете буквально поставить в очередь 400 операторов SQL с параметрами и вставить их все сразу, что очень эффективно, так как это очень быстро. ViewController.swift также показывает вам пример того, как это сделать. Все, что вы на самом деле делаете, это создаете массив словарей под названием sqlAndParams, в этом массиве вы храните словари с двумя ключами «SQL» для оператора продолжения строки или запроса и «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 могут быть выполнены с помощью простой строки для запроса 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.