You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS中执行SQLite查询时出现EXC_BAD_ACCESS错误求助

解决iOS SQLite插入时触发的EXC_BAD_ACCESS错误

从你贴出的SQL插入语句来看,大概率是这几个问题导致了崩溃:

  • 未转义字符串中的单引号:如果你的字段值里包含单引号(比如类似"I'm feeling well"这种内容),直接拼接进SQL语句会破坏语法结构,轻则引发SQL语法错误,重则触发内存访问异常。
  • 语句被截断未闭合:你的SQL末尾是Do you partake in any recr...,明显是字符串被截断了,没有完整闭合引号和括号,SQLite解析器无法正确处理这种不完整语句,进而导致崩溃。
  • 直接拼接字符串的内存风险:用NSString直接拼接超长SQL语句时,若内存管理不当或者字符串长度超出预期,也可能触发EXC_BAD_ACCESS。

最优解决方案:使用参数化查询(绑定变量)

这是避免SQL注入、语法错误和内存问题的标准做法,示例代码如下:

// 用占位符?代替直接拼接的字段值
NSString *insertSQL = @"INSERT INTO tbl_assessment (Question, Answer, Option1, Option2, Option3, Explanation, Used, ImageName, Reference) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";

sqlite3_stmt *statement;
// 预处理SQL语句
if (sqlite3_prepare_v2(database, [insertSQL UTF8String], -1, &statement, NULL) == SQLITE_OK) {
    // 依次绑定各个字段的值
    sqlite3_bind_text(statement, 1, [questionStr UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(statement, 2, [answerStr UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(statement, 3, [option1Str UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(statement, 4, [option2Str UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(statement, 5, [option3Str UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(statement, 6, [explanationStr UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_int(statement, 7, usedInt); // 假设Used是整数类型
    sqlite3_bind_text(statement, 8, [imageNameStr UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(statement, 9, [referenceStr UTF8String], -1, SQLITE_TRANSIENT);
    
    // 执行插入操作
    if (sqlite3_step(statement) != SQLITE_DONE) {
        NSLog(@"插入失败: %s", sqlite3_errmsg(database));
    }
    // 释放语句资源
    sqlite3_finalize(statement);
} else {
    NSLog(@"预处理SQL失败: %s", sqlite3_errmsg(database));
}

额外检查项

  • 确认你的SQLite数据库连接database是有效的,没有被提前释放。
  • 若字段值可能为nil,绑定的时候用sqlite3_bind_null处理,避免传入空指针触发崩溃。
  • 确保所有要插入的字段值都是完整的,不会出现截断情况。

内容的提问来源于stack exchange,提问作者Pankaj Mundra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:39:35