【问题标题】:Using 'in' clause for integer in Sqlite在 Sqlite 中对整数使用“in”子句
【发布时间】:2016-10-14 16:40:22
【问题描述】:

我在其中一个表中有一个Integer 列(响应)。我必须使用 In 子句来获得结果。但这行不通。这就是我正在做的:

NSString *responseString = @"";
    if(filter.isAttending && filter.isDeclined && filter.isNotResponded)
        responseString = @"0,1,3";
    else if(filter.isAttending && filter.isDeclined && !filter.isNotResponded)
        responseString = @"0,1";
    else if(filter.isAttending && !filter.isDeclined && filter.isNotResponded)
        responseString = @"0,3";
    else if(!filter.isAttending && filter.isDeclined && filter.isNotResponded)
        responseString = @"1,3";
    else if(filter.isAttending && !filter.isDeclined && !filter.isNotResponded)
        responseString = @"0";
    else if(!filter.isAttending && !filter.isDeclined && filter.isNotResponded)
        responseString = @"3";
    else if(!filter.isAttending && filter.isDeclined && !filter.isNotResponded)
        responseString = @"1";
    else if(!filter.isAttending && !filter.isDeclined && !filter.isNotResponded)
        responseString = @"-1";  


const char *sql  = sql = "SELECT * FROM Activity Inner Join Invitation on Invitation.ActivityId = Activity.ActivityId Where Invitation.Response in (?) AND Activity.IsDeleted = ? AND Activity.IsAdmin = ? AND Activity.StartDate <= DateTime('now')";  

这就是我绑定值的方式:

sqlite3_bind_text(statement, 1, [responseString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_int(statement, 2, isDeleted);
sqlite3_bind_int(statement, 3, [isAdmin intValue]);

我没有得到任何结果。我怀疑的是,查询变为:

SELECT * FROM Activity Inner Join Invitation on Invitation.ActivityId =   Activity.ActivityId Where Invitation.Response in ("0,1,3") AND Activity.IsDeleted = 1 AND Activity.IsAdmin = 251697 AND Activity.StartDate >= DateTime('now')  

注意是 ("0,1,3") 而不是 (0,1,3)。

但是,当我在 Sqlite 管理器中编写此查询时,它给了我正确的结果:

SELECT * FROM Activity Inner Join Invitation on Invitation.ActivityId =   Activity.ActivityId Where Invitation.Response in (0,1,3) AND Activity.IsDeleted = 1 AND Activity.IsAdmin = 251697 AND Activity.StartDate >= DateTime('now') 

【问题讨论】:

  • 用你如何绑定in子句的值来更新你的问题。
  • @rmaddy:更新!!
  • 需要去掉双引号形式("0,1,3"),必须是(0,1,3)
  • @NiravDoctorwala :这是我的实际问题。
  • 你有没有尝试在你的 sql String var 中使用 %@。

标签: ios objective-c sqlite in-clause


【解决方案1】:

你的怀疑是有道理的; sqlite3_bind_text() 绑定单个文本值。

要绑定多个整数值,您必须在 SQL 字符串 (... IN (?,?,?)) 中插入适当数量的参数标记,并为每个标记调用 sqlite3_bind_int()

(使用%@ 将数字直接放入SQL 查询可能更容易。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多