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