수는 3 열을 갖기 때문에 3을 반환합니다. 하지만 이름을 게시하려고하면 1 행만 반환합니다.Sqlite는 항상 1 행만 반환합니다.
제 코드를 참조하십시오.
sqlite3_stmt *statement;
const char *dbpath = [_databasePath UTF8String];
if (sqlite3_open(dbpath, &_chatDB) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:
@"SELECT MESSAGE from CHATCOMPLETE"];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(_chatDB,
query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
NSString *name = [[NSString alloc] initWithUTF8String:
(const char *) sqlite3_column_text(statement, 0)];
NSLog(@"Name is %@",name);
}
}
else{
NSLog(@"Not found");
// return nil;
}
sqlite3_reset(statement);
}
}
귀하의 질문과 관련이 없지만'sqlite3_reset' 대신 'sqlite3_finalize'를 사용하고 싶습니다. 'sqlite3_reset'은 새로운 변수를 SQL의'? '자리 표시 자에 바인드하고 다시 실행하기 때문에 (여기서는 해당되지 않음),'sqlite3_finalize'는 명령문을 준비함으로써 소비 된 메모리를 해제합니다. 또한'sqlite3_prepare_v2'가 실패하면'sqlite3_errmsg (_chatDB)'를 로깅 할 것을 제안합니다. – Rob