Database 写入时发生Xcode Sqlite序列错误

Database 写入时发生Xcode Sqlite序列错误,database,xcode,ipad,sqlite,Database,Xcode,Ipad,Sqlite,我创建了一个SQLite数据库,目前只有一个表。我将它连接到Xcode,完成了所有必需的步骤,并在编写文件时发现了一个问题 我的表格有5项(主键、姓名、出生日期、学院名称、课程名称) 在保存我的数据时,它会显示: 由于未捕获异常“NSInternalInconsistencyException”而终止应用程序,原因:“创建add语句时出错。”调用的库例程顺序不正确“” 我设置了断点并找到了问题所在,但我就是解决不了 -(void)saveStudentInfo{ sqlite3_stmt *s

我创建了一个SQLite数据库,目前只有一个表。我将它连接到Xcode,完成了所有必需的步骤,并在编写文件时发现了一个问题

我的表格有5项(主键、姓名、出生日期、学院名称、课程名称)

在保存我的数据时,它会显示:

由于未捕获异常“NSInternalInconsistencyException”而终止应用程序,原因:“创建add语句时出错。”调用的库例程顺序不正确“”

我设置了断点并找到了问题所在,但我就是解决不了

-(void)saveStudentInfo{

sqlite3_stmt *statement = NULL;


    const char *sql = "insert into studentInfo (name,collegeName,courseName) Values (?, ?, ?)";

    if (sqlite3_open("my_db_filename.db", &database) == SQLITE_OK)
    {
        //sqlite3_stmt *addStmt;

        if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
        {
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
        } else {
            // do things with addStmt, call sqlite3_step
            sqlite3_bind_text(addStmt, 1, [studentName UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(addStmt, 3, [studentCollegeName UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(addStmt, 4, [studentCourseName UTF8String], -1, SQLITE_TRANSIENT);

            if(SQLITE_DONE != sqlite3_step(addStmt))
                NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
            else
                studentID = sqlite3_last_insert_rowid(database);

            sqlite3_finalize(statement);
        }
        sqlite3_close(database);     
    }


if (sqlite3_step(statement)==SQLITE_DONE){
    UIAlertView *error = [[UIAlertView alloc]initWithTitle:@"Done" message:@"Files were added to database" delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil, nil];
    [error show];
}
else {
    UIAlertView *error = [[UIAlertView alloc]initWithTitle:@"Error" message:@"StudentOrganizer could not add database" delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil, nil];
    [error show];
}

我想您在调用sqlite3\u prepare\u v2之前忘记打开数据库了

这样做的一个好方法是:

sqlite3* database;
if (sqlite3_open("my_db_filename.db", &database) == SQLITE_OK)
{
    sqlite3_stmt *addStmt;

    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
    {
        NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
    } else {
        // do things with addStmt, call sqlite3_step
        sqlite3_finalize(sqlStatement);
    }
    sqlite3_close(database);     
}

如何获取数据库变量?现在,为了测试,我已经设置了这些变量的字符串。但计划是从tableviewcell内的textfield获取值。你知道哪里有错吗?我能看到你的代码和我的代码(工作正常)之间的唯一区别是你在绑定中使用了SQLITE_TRANSIENT,而不是NULL,但是如果这有区别的话,我会感到惊讶。正如CBredlow所问的,您确定数据库设置正确吗?使用某种类型的SQLite工具检查数据库总是很有帮助的。感谢您提供了错误解决方案,但另一个问题是现在无法写入数据库..:/我编辑了之前的代码您是否仍然收到“库例程调用顺序错误”错误?