0

我在我的应用程序中有一个用于删除表行的函数,但是我有一个错误,说“数据库已锁定”。

- (BOOL) deleteByCaption:(NSString *)registerCaption
 {
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK) {
    NSString *querySQL = [NSString stringWithFormat:@"DELETE FROM tabelA WHERE CONTENT_CAPTION = \"%@\"", registerCaption];

    const char *query_stmt = [querySQL UTF8String];
    //        NSMutableArray *resultArray = [[NSMutableArray alloc] init];
    if(sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK){
        if(sqlite3_step(statement) == SQLITE_ROW){
            return YES;
        }else{
            NSLog(@"Error while creating delete statement. '%s'", sqlite3_errmsg(database));
            return NO;
        }
    }
    sqlite3_reset(statement);
}
return NO;
}
4

2 回答 2

0

deleteByCaption函数中,您正在从函数返回而不关闭数据库。

您应该在写作之前写下以下陈述"RETURN YES""RETURN NO"

sqlite3_finalize(statement);
sqlite3_close(database);

请检查您使用过的所有sqlite3_open()功能。

并确保sqlite3_close()在从该函数返回之前编写函数。

于 2013-05-23T08:17:17.250 回答
0

你失踪了sqlite3_finalize()。查看以下代码中的 //PUT HERE 部分。

- (BOOL) deleteByCaption:(NSString *)registerCaption
{
    BOOL isDeleted = NO; //EDIT
    const char *dbpath = [databasePath UTF8String];
    if (sqlite3_open(dbpath, &database) == SQLITE_OK) {
        NSString *querySQL = [NSString stringWithFormat:@"DELETE FROM tabelA WHERE CONTENT_CAPTION = \"%@\"", registerCaption];

        const char *query_stmt = [querySQL UTF8String];
        //        NSMutableArray *resultArray = [[NSMutableArray alloc] init];
        if(sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK){
            if(sqlite3_step(statement) == SQLITE_ROW){
                isDeleted = YES;
                //return YES; //EDIT
            }else{
                NSLog(@"Error while creating delete statement. '%s'", sqlite3_errmsg(database));
                //return NO; //EDIT
            }
        }
        sqlite3_reset(statement);
        sqlite3_finalize(statement); //PUT HERE
        sqlite3_close(database); //EDIT
    }
    //return NO; //EDIT
    return isDeleted; //EDIT
}

编辑:

尝试设置一个变量返回。 查看上面代码中的编辑部分。搜索//编辑。

于 2013-05-23T07:34:07.107 回答