Экспериментируя с sqlite, я хочу начать просмотр списка с данными из БД.Мой источник выглядит так:
-(void) initTheList {
sqlite3 *db;
int rows = 0;
const char* dbFilePathUTF8 = [searchTermDBLocation UTF8String];
int dbrc = sqlite3_open( dbFilePathUTF8, &db );
// count
if (dbrc) {
NSLog( @"Could not open the DB" );
} else {
NSString *queryStatementNS = @"select count(*) from article";
const char* queryStatement = [queryStatementNS UTF8String];
sqlite3_stmt *dbps;
dbrc = sqlite3_prepare_v2(db, queryStatement, -1, &dbps, NULL);
if (sqlite3_step(dbps) == SQLITE_ROW) {
rows = sqlite3_column_int(dbps, 0);
} else {
NSLog(@"SQL step failed code: %d", sqlite3_step(dbps));
NSLog(@"Attempted Query: %@", queryStatementNS);
}
[queryStatementNS release];
}
if (rows > 1000) { ... } else { ... };
...
На самом деле я подумал, что было бы хорошо вызвать код только один раз после загрузки представления.Поэтому я добавил инициализацию массива и вызов метода:
- (void)loadView {
[super loadView];
tableData = [[NSMutableArray alloc] initWithObjects:nil];
[self initTheList];
}
Однако, при этом sqlite3_step возвращает x15 (SQLITE_MISUSE 21 / * Библиотека использовалась неправильно * /).Если я помещу код для вызова метода в метод numberOfRowsInSection, вызов будет работать нормально.
Может кто-нибудь подсказать, где я могу узнать больше о жизненных циклах и отношении к базе данных sqlite?Меня удивляет, что я могу открыть БД, но чтение не удается, в то время как тот же код, помещенный в метод, который явно вызывается в более поздний момент времени, работает нормально.