您可以在Swift中为SQLite使用此库
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
使用Swift和以Swift编写的SQLDataAccess类的SQLite演示
添加到您的项目
您只需要将三个文件添加到您的项目中* SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h必须在您的Xcode项目“ Swift Compiler-General”下的“ Objective-C Bridging Header”中设置Bridging-Header。
使用范例
只需按照ViewController.swift中的代码查看如何使用SQLDataAccess.swift编写简单的SQL首先,您需要打开要处理的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类型的可变参数列表,并且是Array中的参数。所有这些术语在SQL参数列表中均以逗号分隔。您可以在续集语句后立即输入Strings,Integers,Date和Blob,因为所有这些术语均被视为续集的参数。可变参数数组仅使在一个executeStatement或getRecordsForQuery调用中输入所有续集变得很方便。如果没有任何参数,则不要在SQL之后输入任何内容。
结果数组是字典数组,其中“键”是表的列名,“值”是从SQLite获得的数据。您可以使用for循环轻松遍历此数组,也可以直接将其打印出来,也可以将这些Dictionary元素分配给在View Controller中用于模型使用的自定义数据对象类。
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess将存储,文本,双精度型,浮点型,斑点,日期,整数和长整型整数。对于Blob,您可以存储二进制,varbinary,blob。
对于“文本”,您可以存储char,字符,clob,国家字符,本机字符,nchar,nvarchar,varchar,变体,变量字符,文本。
对于日期,您可以存储日期时间,时间,时间戳记,日期。
对于整数,您可以存储bigint,bit,bool,boolean,int2,int8,integer,mediumint,smallint,tinyint,int。
对于Double,您可以存储十进制,double精度,float,数值,实数,double。Double的精度最高。
您甚至可以存储Null类型的Null。
在ViewController.swift中,完成了一个更复杂的示例,显示了如何将Dictionary作为“ 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查询的简单String和用于查询所需参数的Array完成。
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核心数据完整性故障崩溃。