无法从iphone应用程序中的SQLite数据库中删除数据

时间:2011-08-24 09:32:43

标签: iphone sqlite

我无法从SQlite数据库中删除数据。我创建了一个Places数据库。 我能够在UItableView中显示它。但是当我尝试从中删除某些代码时崩溃。

我得到的错误是

  

断言失败 - [放置deleteFromDatabase],/ DESKtop / Current_cortes / Class /Place.m:148

     

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'错误:无法准备语句,消息'库例程不按顺序调用'。

这是程序崩溃的部分。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) 
    {

        NSLog(@"Rows can be edited");
        // Delete the row from the data source.
        Place *PlaceObj = [appDelegate.PlacesArray objectAtIndex:indexPath.row];
        [appDelegate removePlace: PlaceObj];

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
    }   
}

错误发生在[appDelegate removePlace: PlaceObj];的行上。

removePlacedeleteFromDatabase的定义如下:

(void) removePlace:(Place *)PlaceObj 
{

    NSLog(@"remove place called");
    //Delete it from the database.
    [PlaceObj deleteFromDatabase];

    //Remove it from the array.
    [PlacesArray removeObject:PlaceObj];
}

-(void) deleteFromDatabase {
    if (delete_statment == nil) {
        const char *sql = "DELETE FROM places_table WHERE PlaceID=?";
        if (sqlite3_prepare_v2(database, sql, -1, &delete_statment, NULL) != SQLITE_OK) {
            NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
        }
    }

    sqlite3_bind_int(delete_statment, 1, PlaceID);
    int success = sqlite3_step(delete_statment);

    if (success != SQLITE_DONE) {
        NSAssert1(0, @"Error: failed to save priority with message '%s'.", sqlite3_errmsg(database));
    }

    sqlite3_reset(delete_statment);
}

我用Google搜索问题,发现可能是因为我从不同的线程访问数据库。随着代码的开始,我可以从数据库中读取它。所以我需要关闭一些东西,以便我可以从数据库中删除对象吗?

1 个答案:

答案 0 :(得分:0)

您未与SQLite Database连接。请检查您的数据库连接。