Ios 值未从我的应用程序插入sqlite

Ios 值未从我的应用程序插入sqlite,ios,objective-c,sqlite,Ios,Objective C,Sqlite,我正在使用上面的代码将值插入数据库,但它没有插入值。为什么?一些观察结果: 如果调用sqlite3\u errmsg,则在错误发生和随后调用sqlite3\u errmsg之间执行其他SQLite调用。这可能导致错误消息丢失。确定问题后,确保立即调用sqlite3\u errmsg 如果sqlite3\u prepare\u v2,您似乎没有else子句。如果准备失败,请确保检查sqlite3\u errmsg 解决了上述问题后,您提到它说数据库是只读的。您正在从应用程序包打开数据库吗?捆绑包不

我正在使用上面的代码将值插入数据库,但它没有插入值。为什么?

一些观察结果:

  • 如果调用
    sqlite3\u errmsg
    ,则在错误发生和随后调用
    sqlite3\u errmsg
    之间执行其他SQLite调用。这可能导致错误消息丢失。确定问题后,确保立即调用
    sqlite3\u errmsg

  • 如果
    sqlite3\u prepare\u v2
    ,您似乎没有
    else
    子句。如果准备失败,请确保检查sqlite3\u errmsg

  • 解决了上述问题后,您提到它说数据库是只读的。您正在从应用程序包打开数据库吗?捆绑包不可写,这可能导致此错误

    如果数据库包含在应用程序包中,则典型的工作流是

    • 查看数据库是否已复制到Documents文件夹
    • 如果没有,则将数据库从捆绑包复制到Documents文件夹
    • 现在在Documents文件夹而不是bundle中打开数据库
  • 与您手头的问题无关,您只需要在启动事务时执行
    COMMIT
    (例如
    begintransaction
    )。如果不是,则不需要提交
    COMMIT

    如果
    插入失败,您当然不需要提交更改


  • 什么是错误消息该表的架构定义是什么?创建表“PatientInfo”(“P_Id”整型主键自动递增非空唯一、“PatientName”VARCHAR、“PatientId”VARCHAR、“PatientMobile”VARCHAR、“patientMail”VARCHAR、“Patientdates”VARCHAR、“Patientdesc”TEXT)如果
    sqlite3\u-errmsg
    if
    sqlite3\u-prepare\u-v2
    失败,为什么不记录
    sqlite3\u-errmsg
    步骤?如果
    sqlite3\u-code>失败,为什么调用
    COMMIT
    NSString *query = @"INSERT INTO PatientInfo (PatientName,PatientId,PatientMobile,PatientEmail,Patientdates,Patientdesc) VALUES(?,?,?,?,?,?)";
    
    sqlite3_stmt *statement;
    
    if (sqlite3_prepare_v2(_sqldatabase, [query UTF8String], -1, &statement, nil) == SQLITE_OK)
    {
        NSLog(@"In Insert function");
        char* errmsg;
    
        sqlite3_bind_text(statement, 1, [userModel.PatientName UTF8String] ,-1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 2, [userModel.PatientId UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 3, [userModel.MobileNo UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 4, [userModel.PEmail UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 5, [userModel.date UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 6, [userModel.description UTF8String], -1, SQLITE_TRANSIENT);
    
        if(sqlite3_step(statement) != SQLITE_DONE )
        {
            sqlite3_finalize(statement);
            sqlite3_exec(_sqldatabase, "COMMIT", NULL, NULL, &errmsg);
            NSLog( @"addUser Error: %s", sqlite3_errmsg(_sqldatabase) );
            return NO;
        }
        else
        {
            sqlite3_finalize(statement);
            sqlite3_exec(_sqldatabase, "COMMIT", NULL, NULL, &errmsg);
            NSLog(@"Data Inserted into Table.PatientInfo");
            return YES;
        }
    }