我正尝试根据某个日期从我的 sqlite 表中检索一些数据,但出现 EXC_BAD_ACCESS(code=EXC_1386_GPFLT) 错误。这是我获取数据的方法-
-(NSMutableArray*)fetchDataFromTable:(NSString*)tableName whenDate:(NSString*)activeDate{
NSMutableArray *resultArray=[[NSMutableArray alloc]init];
NSString *query = [NSString stringWithFormat:@"select * from %@ where ActiveDate = \"%@\"", tableName, activeDate];
if ([self canOpenDatabase]) { //checks if database can be openned
sqlite3_stmt *statement=nil;
if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW){
NSMutableArray *fetchedResults=[[NSMutableArray alloc]init];
int numberOfColumns = sqlite3_column_count(statement);
for (int i=0; i< numberOfColumns; i++){
char *dataAsChars = (char *)sqlite3_column_text(statement, i);
if (dataAsChars != NULL) {
NSString *dataString = [[NSString alloc] initWithUTF8String:dataAsChars];
[fetchedResults addObject:dataString];
}
}
[resultArray addObject:fetchedResults];
sqlite3_finalize(statement);
sqlite3_close(database);
}
}
else{
NSLog(@"Data can not be retrived");
}
return resultArray;
}
else{
return resultArray;
}
}
我也在尝试打印查询。它显示
select * from Time_table where ActiveDate = "2016-01-01"
请帮帮我。
最佳答案
有几个问题。
- 将对
sqlite3_close
的调用与成功打开数据库配对。 - 将对
sqlite_finalize
的调用与准备语句的成功配对。 - 不要关闭数据库或结束循环内的语句。
- 不要使用
stringWithFormat
构建查询。将值正确地绑定(bind)到准备好的语句中。
关于ios - iOS 的 sqlite 选择方法实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34551094/