Swift FMDB:我必须使用哪种方法?

Posted

技术标签:

【中文标题】Swift FMDB:我必须使用哪种方法?【英文标题】:Swift FMDB : Which method do I have to use? 【发布时间】:2017-10-04 08:36:33 【问题描述】:

我现在正在学习FMDB,方法'executeQuery'和'executeUpdate'有很多种。

executeQuery(sql,values:[Any])
executeQuery(sql,withArgumentsIn: [Any])
executeUpdate(sql,values:[Any])
executeUpdate(sql,withArgumentsIn: [Any])

我想知道这些方法的区别以及何时必须使用哪种方法。

我可以使用任何方法吗?

感谢您的所有回答。 谢谢

【问题讨论】:

【参考方案1】:

executeQuery(sql,values:[Any]):

此方法具有返回类型 FMResultSet。它将给出查询选择的所有记录。我们可以使用这种方法执行 SELECT 语句。

执行更新:

此方法具有返回类型 Bool。我们可以使用这种方法执行INSERT、UPDATE、DELETE语句。

例如

let sql = "insert into User(UserName,Address,Postcode) values(:username,:address,:postcode)"
let args = [“username”:”Tom”,” address”:”Newyork”,” postcode”:”123467”]
executeUpdate(sql,values:args)

【讨论】:

【参考方案2】:

 executeUpdate(...) 

executeUpdate(...) 方法用于所有可以执行的查询 修改数据库(换句话说,非 Select 查询)

database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["a", "b", "c"])

executeQuery(...)

一个 SELECT 语句是一个查询,并通过其中一个执行 -executeQuery... 方法。

database.executeQuery("select x, y, z from test", values: nil)

FMDB

【讨论】:

executeUpdate(sql,values:[Any]) 和 executeUpdate(sql,withArgumentsIn: [Any]) 有什么区别吗?我可以使用任何东西吗? 你可以通过跳转到定义看到FMDatabase.h类中的定义,这是关于抛出Error【参考方案3】:

您可以通过查看函数签名来区分。

executeQuery(sql: String, withArgumentsIn: [Any]) -> FMResultSet?
executeQuery(sql: String, values: [Any]?) throws -> FMResultSet

executeQuery 返回一个FMResultSet,因此它适用于返回数据的语句(即 SELECT 语句)。两个版本的区别在于查询失败时会发生什么 - 第一个版本在失败时返回 nil,而第二个版本抛出错误。

executeUpdate(sql: String, withArgumentsIn: [Any]) -> Bool
executeUpdate(sql: String, values: [Any]?) throws -> Void

executeUpdate 不返回数据;它基本上用于其他一切。和以前一样,两者之间的区别在于它们如何处理失败 - 第一个返回布尔值(如果语句成功,则返回 true,如果失败则返回 false),而第二个不返回任何内容,但如果失败则抛出错误。

【讨论】:

以上是关于Swift FMDB:我必须使用哪种方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 的 FMDatabaseQueue (FMDB)

如何在 Swift 中使用“FMDB/SQLCipher”进行加密和解密?

如何将 FMDB 与 cocoapods 和 swift 一起使用?

无法使用 swift 3 在 FMDB 中执行更新

FMDB、Swift 3、executeUpdate - 编译器构建失败

如何在 swift 3 中使用现有的 SQLite? (FMDB)