【发布时间】:2018-03-22 20:58:33
【问题描述】:
我在 xcode swift 项目中访问 sqlite3 数据库时遇到问题。特别是当将准备好的 sql 语句中的主机参数绑定到文本(字符串)值时,绑定总是绑定所有?而不仅仅是一个。所以结果不是预期的。 (注意:我只是使用带有指定桥接头文件的内置 sqlite3 库,而不是任何第 3 方包装器)
例如:我的测试数据库表有一个名为 str1 的列,其值为“2010”、“2011”等年份(不是整数,而是字符串)。如果我使用 SQL 语句:
SELECT * FROM table1 WHERE str1 BETWEEN '2011' AND '2012'
它为我提供了我期望得到的所有行。但是如果我使用语句:
SELECT * FROM table1 WHERE str1 BETWEEN ? AND ?
并将准备好的语句绑定到:
sqlite3_bind_text(statement, 1, "2011", -1, nil)
sqlite3_bind_text(statement, 2, "2012", -1, nil)
它只返回“2012”的行。准备工作已完成:
sqlite3_prepare_v2(db, sql, -1, &statement, tail)
所以,绑定有点工作,但它似乎总是替换 ALL ?与价值,而不仅仅是一个。 (如果我使用唯一的参数名称,例如 ?1 和 ?2 而不仅仅是 ? ?,它的工作原理没有什么不同)
那么,我的问题是:如何将 sqlite3 主机参数绑定到 Swift 字符串值?
【问题讨论】: