使用NSArray作为语句参数的任意SQL

时间:2015-04-14 18:20:43

标签: ios objective-c sqlite swift

我使用SQLite.swift并希望创建一个这样的SQL语句:

"SELECT * FROM user WHERE id IN({userDtoIds})"

我做了

let arr:[String] = // NSArray of Strings
let stmt:Statement = db.prepare("SELECT * FROM \(tableName) WHERE id IN(?)")

stmt.run()不允许[String]作为参数。

如何在SQLite.swift中使用NSArray作为SQL语句的参数?

1 个答案:

答案 0 :(得分:0)

如果您使用的是类型安全图层,则可以使用contains()

table.filter(contains(ids, id))

// the above assumes this boilerplate precedes it:
let table = db["tableName"]
let id = Expression<Int64>("id")
let ids: [Int64] = [1, 2, 3, 4, 5] // e.g.

如果您正在使用原始SQLite3 API,它不支持数组,因此您需要自行格式化:

let template = join(", ", [String](count: count(ids), repeatedValue: "?"))
let stmt = db.prepare(
    "SELECT * FROM \(tableName) WHERE id IN (\(template))", ids
)