我想做的就是发送一个查询
SELECT * FROM table WHERE col IN (110, 130, 90);
Run Code Online (Sandbox Code Playgroud)
所以我准备了以下声明
SELECT * FROM table WHERE col IN (:LST);
Run Code Online (Sandbox Code Playgroud)
然后我用
sqlite_bind_text(stmt, 1, "110, 130, 90", -1, SQLITE_STATIC);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这变成
SELECT * FROM table WHERE col IN ('110, 130, 90');
Run Code Online (Sandbox Code Playgroud)
并且没用(请注意另外两个单引号).我已经尝试在字符串中添加额外的'但它们会被转义.我没有找到关闭转义或防止文本被单引号括起来的选项.我能想到的最后一件事是没有使用准备好的声明,但我只把它作为最后一个选项.你有什么想法或建议吗?
谢谢
编辑:
参数的数量是动态的,因此它可能是三个数字,如上例所示,一个或十二个.
我正在摆弄Swift中的泛型并找到一些我无法弄清楚的东西:如果我将一个值转换为泛型参数的类型,则不会执行强制转换.如果我尝试使用静态类型,它可以工作.
class SomeClass<T> {
init?() {
if let _ = 4 as? T {
println("should work")
} else {
return nil
}
}
}
if let _ = SomeClass<Int?>() {
println("not called")
}
if let _ = 4 as? Int? {
println("works")
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这种行为吗?这两种情况不应该相同吗?
以上示例简化为最大值.以下示例说明了需要更好的演员表
class SomeClass<T> {
init?(v: [String: AnyObject]) {
if let _ = v["k"] as? T? {
print("should work")
} else {
print("does not")
return nil
}
}
}
if let _ = SomeClass<Int?>(v: ["k": 4]) …Run Code Online (Sandbox Code Playgroud)