ios - iOS 的 sqlite 选择方法实现问题

标签 ios select sqlite

我正尝试根据某个日期从我的 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"

请帮帮我。

最佳答案

有几个问题。

  1. 将对 sqlite3_close 的调用与成功打开数据库配对。
  2. 将对 sqlite_finalize 的调用与准备语句的成功配对。
  3. 不要关闭数据库或结束循环内的语句。
  4. 不要使用 stringWithFormat 构建查询。将值正确地绑定(bind)到准备好的语句中。

关于ios - iOS 的 sqlite 选择方法实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34551094/

相关文章:

sql - 验证两个不同表的两列完全匹配

c# - 使用 sqlite-net + async 时设置 Sqlite ThreadingMode

mysql - 外部 Sqlite 服务器的 iOS 登录屏幕

ios - UIBarButtonItem UINavigationBar 中的自定义 View

html - 选择元素上下拉框的大小

ios - 在 iOS 中为单个标记单元添加颜色

python - selenium python 元素从下拉菜单中选择

MySQL - 使用 WHERE 或 HAVING 子句中的结果计算每行中两列的值

ios - 将打印重定向到文件,例如将 NSLog 重定向到文件

ios - 使用 localIdentifier,swift 访问视频