我创建了一个小的数据库升级工具,以基于PRAGMA user_version更新我们的sqlite数据库表。一直很好,直到最近我需要完全删除一张桌子。

显然drop table命令是

DROP TABLE tbl;

sql指令使用以下命令执行:
NSString *currentUpdateStatement = [upgradeStatements objectAtIndex:statementNumber];
DLog(@"Update statement is: %@", currentUpdateStatement);
const char *sql_stmt = [currentUpdateStatement UTF8String];
char *errMsg;
//Start executing the upgrade command
if (sqlite3_exec(self.database, sql_stmt, NULL, NULL, &errMsg) == SQLITE_OK)
{
    DLog(@"Upgrade statement %i successful", statementNumber);
} else {
    NSString *errorMessage = [NSString stringWithUTF8String:errMsg];
    ELog(@"Upgrading failed at statement %i in version %i. Message: %@",
    statementNumber, newVersionNumber, errorMessage);
    [NSException raise:@"Database upgrade failed"
    format:@"Database could not be upgraded to version %i. "
    "Failed at command %i due to error '%@'",newVersionNumber, statementNumber, errorMessage];
 }

每次我尝试运行放置表命令时,执行都会失败,并显示“数据库已锁定”,结果为SQLITE_LOCKED。

所有其他命令完全没问题。我试图一遍又一遍地阅读SQL文档。
你们有什么感想?

最佳答案

前一个事务后缺少sqlite3_finalize(statement)可能导致此错误。

07-27 13:39