Você pode usar esta biblioteca em Swift para SQLite
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
SQLite Demo usando Swift com classe SQLDataAccess escrita em Swift
Adicionando ao seu projeto
Você só precisa de três arquivos para adicionar ao seu projeto * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header deve ser definido no projeto do Xcode 'Objective-C Bridging Header' em 'Compilador Swift - Geral'
Exemplos de uso
Basta seguir o código em ViewController.swift para ver como escrever SQL simples com SQLDataAccess.swift Primeiro você precisa abrir o banco de dados SQLite com o qual está lidando
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
Se openConnection for bem-sucedido, agora você pode fazer uma inserção simples na Tabela 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)")
}
Veja como foi simples!
O primeiro termo em db.executeStatement é seu SQL como String, todos os termos que se seguem são uma lista de argumentos variadic do tipo Any e são seus parâmetros em um Array. Todos esses termos são separados por vírgulas em sua lista de argumentos SQL. Você pode inserir Strings, Integers, Date's e Blobs logo após a instrução de sequência, pois todos esses termos são considerados parâmetros para a sequência. A matriz de argumento variadic apenas torna conveniente inserir toda a sua sequência em apenas uma chamada executeStatement ou getRecordsForQuery. Se você não tiver nenhum parâmetro, não insira nada após seu SQL.
A matriz de resultados é uma Matriz de Dicionário, onde a 'chave' é o nome da coluna da sua tabela, e o 'valor' são os seus dados obtidos do SQLite. Você pode iterar facilmente por meio desse array com um loop for ou imprimi-lo diretamente ou atribuir esses elementos Dictionary a classes de objetos de dados personalizados que você usa em seus controladores de visualização para consumo de modelo.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess armazenará texto, duplo, flutuante, blob, data, inteiro e inteiros longos longos. Para Blobs, você pode armazenar binary, varbinary, blob.
Para Texto, você pode armazenar char, caractere, clob, caractere variável nacional, caractere nativo, nchar, nvarchar, varchar, variante, caractere variável, texto.
Para datas, você pode armazenar datetime, time, timestamp, date.
Para inteiros, você pode armazenar bigint, bit, bool, boolean, int2, int8, inteiro, mediumint, smallint, tinyint, int.
Para Doubles, você pode armazenar decimal, precisão dupla, float, numérico, real, duplo. Double tem mais precisão.
Você pode até armazenar Nulls do tipo Null.
Em ViewController.swift, um exemplo mais complexo é feito mostrando como inserir um Dicionário como um 'Blob'. Além disso, SQLDataAccess entende Swift Date () nativo para que você possa inserir esses objetos sem conversão e irá convertê-los em texto e armazená-los e, quando recuperado, convertê-los de volta de texto em Date.
Claro que o verdadeiro poder do SQLite é sua capacidade de transação. Aqui você pode literalmente enfileirar 400 instruções SQL com parâmetros e inseri-los todos de uma vez, o que é realmente poderoso, pois é muito rápido. ViewController.swift também mostra um exemplo de como fazer isso. Tudo o que você realmente está fazendo é criar um Array de Dicionários chamado 'sqlAndParams', neste Array seus Dicionários de armazenamento com duas chaves 'SQL' para a instrução ou consulta de sequência String e 'PARAMS' que é apenas um Array de objetos nativos SQLite entende por essa consulta. Cada 'sqlParams', que é um dicionário individual de consulta sequencial mais parâmetros, é então armazenado no array 'sqlAndParams'. Depois de criar esse array, basta chamar.
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)")
}
Além disso, todos os métodos executeStatement e getRecordsForQuery podem ser feitos com String simples para consulta SQL e um Array para os parâmetros necessários à consulta.
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)")
}
Uma versão Objective-C também existe e é chamada de mesmo SQLDataAccess, então agora você pode escolher escrever sua sequência em Objective-C ou Swift. Além disso, SQLDataAccess também funcionará com SQLCipher, o código presente ainda não foi configurado para funcionar com ele, mas é muito fácil de fazer, e um exemplo de como fazer isso está na versão Objective-C de SQLDataAccess.
SQLDataAccess é uma classe muito rápida e eficiente, e pode ser usada no lugar de CoreData, que realmente usa SQLite como seu armazenamento de dados subjacente, sem todas as falhas de integridade de dados do núcleo CoreData que vêm com CoreData.