不从我的应用程序插入sqlite的值

时间:2016-04-18 13:58:59

标签: ios objective-c sqlite

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;
    }
}

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

1 个答案:

答案 0 :(得分:0)

有几点意见:

  1. 在您调用sqlite3_errmsg的地方,您将在错误发生和后续调用sqlite3_errmsg之间执行其他SQLite调用。这可能导致错误消息丢失。确定问题后,请务必立即致电sqlite3_errmsg

  2. 如果sqlite3_prepare_v2,您似乎没有else条款。如果准备失败,请务必检查sqlite3_errmsg

  3. 解决了上述问题后,您提到它说数据库是只读的。您是否从应用包中打开数据库?捆绑包不可写,这可能会导致此错误。

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

    • 查看数据库是否已复制到Documents文件夹;
    • 如果没有,请将数据库从捆绑包复制到Documents文件夹;
    • 现在打开Documents文件夹而不是bundle。
  4. 与您的问题无关,如果您开始了一项交易(例如COMMIT),则只需执行BEGIN TRANSACTION。如果不是,则不需要COMMIT

    如果INSERT失败,您当然不需要提交更改。