iOS应用程序在使用EXC\u BAD\u指令重置sqlite3\u时崩溃

iOS应用程序在使用EXC\u BAD\u指令重置sqlite3\u时崩溃,ios,sqlite,Ios,Sqlite,我的iOS应用程序在Xcode模拟器中终止,原因是下一行出现EXC_BAD_指令(代码=EXC_i386_INVOP)错误 sqlite3_reset(stmt); 完整的代码块是 -(BOOL)containsPendingSignature { sqlite3_stmt *stmt = nil; const char* sql = "SELECT Count(*) FROM pending_signatures"; if(sqlite3_prepare_v2(database, sql,

我的iOS应用程序在Xcode模拟器中终止,原因是下一行出现EXC_BAD_指令(代码=EXC_i386_INVOP)错误

sqlite3_reset(stmt);
完整的代码块是

-(BOOL)containsPendingSignature
{
sqlite3_stmt *stmt = nil;

const char* sql = "SELECT Count(*) FROM pending_signatures";
if(sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error:'%s'", sqlite3_errmsg(database));


int rowCount = 0;
if(sqlite3_step(stmt) == SQLITE_ROW) {
    rowCount = sqlite3_column_int(stmt, 0);
}

sqlite3_reset(stmt);
sqlite3_finalize(stmt);
return rowCount > 0;
}

请任何人提出问题所在,提前谢谢。

这类问题的解决方案是,您可能缺少下面的陈述

 sqlite3_finalize(statement);
        sqlite3_close(database);
以后

sqlite3_open()
sqlite3_prepare_v2()
我们应该总是在返回语句之前完成语句并关闭数据库。不要让数据库保持打开状态。 如果您尝试再次打开数据库,则不会终止语句,也不会关闭数据库
sqlite3\u open()

这将导致有关数据库的
EXC\u BAD\u指令(code=EXC\u I386\u INVOP,子代码=0x0)

 -(BOOL)containsPendingSignature
    {
    sqlite3_stmt *stmt = nil;

    const char* sql = "SELECT Count(*) FROM pending_signatures";
    if(sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK)
    NSAssert1(0, @"Error:'%s'", sqlite3_errmsg(database));


    int rowCount = 0;
    if(sqlite3_step(stmt) == SQLITE_ROW) {
        rowCount = sqlite3_column_int(stmt, 0);
    }

     sqlite3_finalize(statement);
     sqlite3_close(database);
    return rowCount > 0;
    }

我希望这将对您有所帮助….

这是因为您没有在每次使用后关闭数据库。。。。。看看这个,谢谢你的回复。我尝试添加
sqlite3\u close(数据库)但错误仍然存在。我应该在前面的函数中也添加这个吗?您应该在所有函数中添加finalize和close语句。
 -(BOOL)containsPendingSignature
    {
    sqlite3_stmt *stmt = nil;

    const char* sql = "SELECT Count(*) FROM pending_signatures";
    if(sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK)
    NSAssert1(0, @"Error:'%s'", sqlite3_errmsg(database));


    int rowCount = 0;
    if(sqlite3_step(stmt) == SQLITE_ROW) {
        rowCount = sqlite3_column_int(stmt, 0);
    }

     sqlite3_finalize(statement);
     sqlite3_close(database);
    return rowCount > 0;
    }