試用sqlite,我想用數據從數據庫初始化一個列表視圖。我的來源是這樣的:sqlite3_step返回代碼21 loadView
-(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數據庫的關係嗎?令我驚訝的是,我可以打開數據庫,但讀取失敗,而放置在明顯在稍後時間點調用的方法中的相同代碼可以正常工作。
由於您正在嘗試使用SQLite,這意味着您是新手。除非您對SQLite有非常明確的需求,否則請改爲探索Core Data。編寫原始SQL通常是浪費時間。 – bbum 2010-10-16 16:06:11
感謝您的建議,我將對Core Data進行調查。不過,我仍然感興趣的是爲什麼從sqlite數據庫中選擇數據在一種情況下工作,但不在另一種情況下。 – Sven 2010-10-18 10:55:43