我试图从表中读取数据。 最初它是空的。如果我当时试图阅读它将导致异常。 我的代码在下面给出
-(NSMutableArray *) selectDataFrom:(NSString *) tableName
{
NSString *qsql = [NSString stringWithFormat:@"SELECT * FROM '%@' ",tableName];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2( dataBase, [qsql UTF8String], -1, &statement, nil) == SQLITE_OK)
{
NSLog(@"INSIDE IF");
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSLog(@"INSIDE WHILE");
// my code
}
}
return allData;
}
第一个NSLog(“INDISE IF”);打印出来。 但第二个不是印刷。
提到一些书来学习iPhone的sqlite3语句[例如:sqlite_prepare_v2();] 不是SQL
[抱歉我的英语不好]
这是完整的代码
-(NSMutableArray *) selectDataFrom:(NSString *) tableName
{
allData = [[NSMutableArray alloc] init];
NSString *qsql = [NSString stringWithFormat:@"SELECT * FROM '%@' ",tableName];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2( dataBase, [qsql UTF8String], -1, &statement, nil) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSLog(@"REACHED 1");
myProgram = [[Programs alloc] init];
char *date = (char *) sqlite3_column_text(statement, 0);
myProgram.nss_Date = [[NSString alloc] initWithUTF8String:date];
char *type = (char *) sqlite3_column_text(statement, 3);
myProgram.nss_Type = [[NSString alloc]initWithUTF8String:type];
[nsma_allDonorsMA addObject:d_OneDonor];
}
}
else {
// NSLog(@"failed to select data");
}
return allData;
}
答案 0 :(得分:1)
尝试在异常上启用断点并在调试器中运行您的应用。它会准确显示您呼叫objectAtIndex:
的位置。 (在上面的代码中不是)
答案 1 :(得分:0)
你的sqlite3_finalize() ??
在哪里您应该在sqlite3_prepare_v2块中释放sqlite3_stmt结构,如下所示。
sqlite3_stmt *sql_stmt;
if (sqlite3_prepare_v2(...) == SQLITE_OK)
{
....
sqlite3_finalize(sql_stmt);
}