在 SQLite 语句中使用 NSArray
Use NSArray in SQLite Statement
我使用 SQLite.swift 并想替换语句中的问号。可以像这样对单个条目执行此操作:
let stmt = db.prepare("INSERT INTO users (email) VALUES (?)")
for email in ["betty@icloud.com", "cathy@icloud.com"] {
stmt.run(email)
}
我没有看到如何执行以下操作来使用像这样的数组:
var values:[String] = ["test1","test2", "test3"]
在这样的声明中:
let stmt = db.prepare("SELECT * from users where email in (?)")
以下无效:
stmt.run(values)
如何使用 NSArray 作为语句的参数?
如果您使用的是类型安全层,则可以使用 contains()
:
users.filter(contains(["test1", "test2"], email))
// the above assumes this boilerplate precedes it:
let email = Expression<String>("email")
let users = db["users"]
如果您使用的是原始 SQLite3 API,它不支持数组,因此您需要自己格式化它们:
let emails = ["test1", "test2"]
let template = join(", ", [String](count: count(emails), repeatedValue: "?"))
let stmt = db.prepare(
"SELECT * FROM users WHERE email IN (\(template))", emails
)
我使用 SQLite.swift 并想替换语句中的问号。可以像这样对单个条目执行此操作:
let stmt = db.prepare("INSERT INTO users (email) VALUES (?)")
for email in ["betty@icloud.com", "cathy@icloud.com"] {
stmt.run(email)
}
我没有看到如何执行以下操作来使用像这样的数组:
var values:[String] = ["test1","test2", "test3"]
在这样的声明中:
let stmt = db.prepare("SELECT * from users where email in (?)")
以下无效:
stmt.run(values)
如何使用 NSArray 作为语句的参数?
如果您使用的是类型安全层,则可以使用 contains()
:
users.filter(contains(["test1", "test2"], email))
// the above assumes this boilerplate precedes it:
let email = Expression<String>("email")
let users = db["users"]
如果您使用的是原始 SQLite3 API,它不支持数组,因此您需要自己格式化它们:
let emails = ["test1", "test2"]
let template = join(", ", [String](count: count(emails), repeatedValue: "?"))
let stmt = db.prepare(
"SELECT * FROM users WHERE email IN (\(template))", emails
)