小编Seb*_*ian的帖子

SQLite:将值列表绑定到"WHERE col IN(:PRM)"

我想做的就是发送一个查询

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)

并且没用(请注意另外两个单引号).我已经尝试在字符串中添加额外的'但它们会被转义.我没有找到关闭转义或防止文本被单引号括起来的选项.我能想到的最后一件事是没有使用准备好的声明,但我只把它作为最后一个选项.你有什么想法或建议吗?

谢谢

编辑:

参数的数量是动态的,因此它可能是三个数字,如上例所示,一个或十二个.

sqlite select bind prepared-statement

29
推荐指数
5
解决办法
3万
查看次数

在Swift中转换为泛型可选

我正在摆弄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)

generics optional swift

6
推荐指数
1
解决办法
947
查看次数

标签 统计

bind ×1

generics ×1

optional ×1

prepared-statement ×1

select ×1

sqlite ×1

swift ×1