내 iPhone 앱에서 SQLite C API를 사용하려고합니다. 특정 날짜 이후에 완료된 레코드 수에 대해 SQLite 데이터베이스를 쿼리하려고합니다. 데이터베이스는 완성 된 날짜를 리터럴 텍스트를 SQLite 쿼리에 바인딩하는 방법은 무엇입니까?
YYYY-MM-dd형식의 텍스트로 저장합니다. 예를 들어, 텍스트
2009-04-10은 완료 날짜로 나타날 수 있습니다.
명령 줄에서 데이터베이스를 쿼리 할 때 내 쿼리가 작동하지만 응용 프로그램에서 실행할 때는 그렇지 않습니다. 여기에 내가 뭘하는지의 : 명령 줄에서
,이 쿼리를 실행 : 당신이 볼 수 있듯이, 나는 예상대로 발견 한 기록이
sqlite> SELECT COUNT(*) FROM tasks WHERE completed > '2009-04-09'
...> go
1
있다. 내 응용 프로그램에서
, 나는 (분명히, 오브젝티브 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에서 물음표를 인용하거나 리터럴 텍스트 날짜를 쿼리에 바인딩하는 것. 그러나 나는 행운이없이 여러 가지 방법으로 시도했다. 도움!