gpt4 book ai didi

ios - Sqlite 数据库在某些情况下在插入数据时被锁定

转载 作者:行者123 更新时间:2023-11-28 22:57:58 24 4
gpt4 key购买 nike

我的 Iphone 应用程序有问题。有时我的应用程序运行成功,但在某些情况下它会给出“数据库被锁定异常”,这就是为什么我无法从 sqlite 数据库读取或插入数据。如果有人有解决方案,请建议我。这是我将数据插入数据库的代码谢谢。

-(void)insertDataIntoDatabase
{
NSLog(@"insertDataIntoDatabase-----1");

@try{
tUserName=userNameTf.text;
tLevel=[NSString stringWithFormat:@"%d",level];
tMoves=[NSString stringWithFormat:@"%d",moves];

NSLog(@"tLevel;;;%@",tLevel);
// NSString *tdatabaseName = @"FlipScoreBord.sqlite";
sqlite3_stmt *addStatement;
// NSArray *tdocumentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString *tdocumentsDir = [tdocumentPaths objectAtIndex:0];
// NSString *tdatabasePath = [tdocumentsDir stringByAppendingPathComponent:tdatabaseName];
NSString *insertQuery = [NSString stringWithFormat:@"INSERT INTO Moves (User_Name,User_Label,User_Moves) VALUES('%@','%@','%@')",tUserName,tLevel,tMoves];
const char *sql = [insertQuery cStringUsingEncoding:NSUTF8StringEncoding];

if(sqlite3_prepare_v2(tdatabase, sql, -1, &addStatement, NULL) != SQLITE_OK)
{
NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(tdatabase));
}
sqlite3_bind_text(addStatement, 0, [tUserName UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(addStatement, 1, [tLevel UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(addStatement, 2, [tUserName UTF8String], -1, SQLITE_TRANSIENT);

if(SQLITE_DONE != sqlite3_step(addStatement))
{
NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(tdatabase));
sqlite3_reset(addStatement);
}
sqlite3_close(tdatabase);
}

@catch (NSException *r)
{
NSLog(@"Exception---- %@",r);
}
NSLog(@"insertDataIntoDatabase-----2");

}

最佳答案

我不得不承认我使用了 FMDB(一种将我与 SQLite 函数隔离开来的 SQLite 包装器),但有些事情看起来很奇怪:

  1. 如果你有 sqlite3_prepare_v2() 语句,你不需要你的 sqlite3_finalize() 吗?

  2. 看起来您正在关闭这里的数据库,而不是打开它。似乎这打开了您的 sqlite3_open() 语句和 sqlite3_close() 调用不平衡的可能性。您是否 100% 确信这不是问题所在?我会尝试在打开和关闭语句中放入 NSLog,并确保它们是平衡的。

这两个问题的组合让我想知道你是否指的是 sqlite3_finalize() 而你目前有 sqlite3_close()。

只是一些想法。

关于ios - Sqlite 数据库在某些情况下在插入数据时被锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10442541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com