【发布时间】:2010-10-18 19:20:31
【问题描述】:
我正在尝试在我的 iPhone 应用程序中使用 SQLite C API。我正在尝试在 SQLite 数据库中查询在某个日期之后已完成的记录数。数据库将完成日期作为文本保存在
YYYY-MM-dd格式。例如,文本
2009-04-10可能显示为完成日期。
当我从命令行查询数据库时,我的查询有效,但从应用程序运行时,查询无效。这就是我正在做的事情:
从命令行,我运行这个查询:
sqlite> SELECT COUNT(*) FROM tasks WHERE completed > '2009-04-09'
...> go
1
如您所见,如我所料,找到了一条记录。
在我的应用程序中,我执行了这段代码(显然是用 Objective-C 编写的):
static sqlite3_stmt *count_tasks_statement = nil;
if(count_tasks_statement == nil) {
const char *sql = "SELECT COUNT(*) FROM tasks WHERE completed > '?'";
if (sqlite3_prepare_v2(database, sql, -1, &count_tasks_statement, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
}
NSString *today = @"2009-04-09";
sqlite3_bind_text(count_tasks_statement, 1, [today UTF8String], -1, SQLITE_TRANSIENT);
// Get the row count from the query
NSInteger taskCount = 0;
if(sqlite3_step(count_tasks_statement) == SQLITE_ROW) {
// The second parameter indicates the column index into the result set.
taskCount = sqlite3_column_int(count_tasks_statement, 0);
}
// Reset the statement for future reuse.
sqlite3_reset(count_tasks_statement);
当我在这段代码上使用调试器并检查 taskCount 变量时,它被设置为 0,表示没有找到记录。 (如果我更改代码以返回找到的行的主键,它仍然不返回任何内容。)
由于它在命令行中工作,但在我的代码中没有,我认为我在 SQL 中引用问号或将文字文本日期绑定到询问。但是,我已经尝试了很多不同的方法,但没有运气。救命!
【问题讨论】:
标签: iphone sql objective-c sqlite