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;
}
}
我使用上面的代码将值插入到数据库中,但它没有插入值为什么?
答案 0 :(得分:0)
有几点意见:
在您调用sqlite3_errmsg
的地方,您将在错误发生和后续调用sqlite3_errmsg
之间执行其他SQLite调用。这可能导致错误消息丢失。确定问题后,请务必立即致电sqlite3_errmsg
。
如果sqlite3_prepare_v2
,您似乎没有else
条款。如果准备失败,请务必检查sqlite3_errmsg
。
解决了上述问题后,您提到它说数据库是只读的。您是否从应用包中打开数据库?捆绑包不可写,这可能会导致此错误。
如果数据库包含在应用程序包中,则典型的工作流程为
与您的问题无关,如果您开始了一项交易(例如COMMIT
),则只需执行BEGIN TRANSACTION
。如果不是,则不需要COMMIT
。
如果INSERT
失败,您当然不需要提交更改。