使用 swiftyJSON 和 sqlite.swift 将基于 json 的数据添加到 sqlite 数据库中
Posted
技术标签:
【中文标题】使用 swiftyJSON 和 sqlite.swift 将基于 json 的数据添加到 sqlite 数据库中【英文标题】:add json-based data into a sqlite database using swiftyJSON and sqlite.swift 【发布时间】:2015-07-26 19:02:49 【问题描述】:请耐心等待这是我的第一个 swift 项目,我还没有跟上语法/语言的速度。
我使用 AlamoFire 从 Web 服务中检索数据并使用 SwiftyJson 对其进行解析。然后我想使用 SQLite.swift 将它插入到本地 SQLite 数据库中。
到目前为止,AlomoFire、SwiftyJson 和 SQLite.swift 已安装并在我的项目中运行,令我惊讶的是,事情进展得非常顺利;)
现在我的问题。我得到的数据是 JSON 格式的数组,所以我想这样做:
let companiesTable = db["companies"] // get the table from our SQLite Database
db.transaction(.Deferred) txn in
for (index,company) in data
if companiesTable.insert(name <- company["name"]!), shortname <- company["short_name"]).statement.failed
return .Rollback
return .Commit
我的问题在于插入。我必须使用 ! 强制展开,这对于名称(数据库中的必需列)是可以的,但对于短名称或其他十几个可能为空/空的列(为简单起见,在上面的示例中未提及)则不行。当然应该只插入有值的列。
第二个问题。我在***上找到了关于事务的东西,在执行“返回”时事务是自动提交还是回滚
【问题讨论】:
【参考方案1】:你问:
我的问题在于插入。我必须使用 ! 强制展开,这对于名称(数据库中的必需列)是可以的,但对于短名称或其他十几个可能为空/空的列(为简单起见,在上面的示例中未提及)则不行。
如果像shortname
这样的字段可以为空/null,则相应地定义它:
let company = db["companies"]
let name = Expression<String>("name")
let shortname = Expression<String?>("short_name")
当你这样做时,当你插入数据时,如果 short_name
存在,它会使用它,如果不存在,它将是 NULL
在数据库中:
let data = [
(1, ["name": "United States of America", "short_name": "US"]),
(2, ["name": "United Kingdom", "short_name": "UK"]),
(3, ["name": "France"])]
let companiesTable = db["companies"] // get the table from our SQLite Database
db.transaction(.Deferred) txn in
for (index,company) in data
if companiesTable.insert(name <- company["name"]!, shortname <- company["short_name"]).statement.failed
return .Rollback
return .Commit
然后你问:
第二个问题。我在***上找到了关于事务的东西,在执行“返回”时事务是自动提交还是回滚
如果您使用transaction
方法,它是否提交或回滚取决于您返回的TransactionResult
值。在这个例子中,如果你返回.Commit
,它将提交,如果你返回.Rollback
,它将回滚。
【讨论】:
以上是关于使用 swiftyJSON 和 sqlite.swift 将基于 json 的数据添加到 sqlite 数据库中的主要内容,如果未能解决你的问题,请参考以下文章
无法使用“((Any))”类型的参数列表调用“JSON” - 使用 AlamoFire 和 SwiftyJSON
SwiftyJson 和 Alamofire 使用的解码结构
如何使用 Alamofire 和 SwiftyJSON 正确解析 JSON
如何将 RxSwift 与 AlamoFire 和 SwiftyJSON 一起使用?