删除数据库中的数据时出现问题

时间:2014-11-03 08:41:21

标签: ios sqlite

我正在使用sqlite数据库,我在tableview中显示数据,当我删除tableview中的行时,数据也应该在我的db表中删除。我写了删除查询,但没有在我的sqlitedb表中删除。

这是我的代码

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

    if (btnCliked==NO)
    {

        [videoTitleArrya removeObjectAtIndex:indexPath.row];
        [videoImagesLinksDataArray removeObjectAtIndex:indexPath.row];
        NSLog(@"videoTitleArrya%@",videoTitleArrya);
        NSLog(@"videoImagesLinksDataArray%@",videoImagesLinksDataArray);
        NSUInteger temp=[[videoTitleArrya objectAtIndex:indexPath.row] intValue];
        [self deleteDataBaseRow:temp];

      }


    [tableView reloadData];
}
else if (editingStyle == UITableViewCellEditingStyleInsert)
{

}
}

 -(void)deleteDataBaseRow:(NSUInteger)RowNumber

   {
       if (sqlite3_open([dbPathString UTF8String], &DB)==SQLITE_OK)
      {
    NSLog(@"dataBaseOpen");
    NSString *Query = [NSString stringWithFormat:@"DELETE  FROM mytablename where 
     id ='%@'",RowNumber];

    const char * deletequery = [Query UTF8String];
    if (sqlite3_prepare_v2(DB, deletequery, -1, &statement, NULL) != SQLITE_OK)
    {

     NSLog(@"deletedSuccessfully");

    }
  sqlite3_close(DB);

}}

2 个答案:

答案 0 :(得分:1)

从您的代码中我想处理一些问题,如果所有其他事情都合适,它将从数据库中删除记录。

看看这一行:

NSString *Query = [NSString stringWithFormat:@"DELETE  FROM mytablename where 
 id ='%@'",RowNumber];

您可以在%@变量int使用RowNumber运算符。用这个

替换上面的行
NSString *strRowNumber = [NSString stringWithFormat:@"%d",RowNumber];
NSString *Query = [NSString stringWithFormat:@"DELETE FROM mytablename where id ='%@'",strRowNumber];

要观察的第二件事是在线下:

if (sqlite3_prepare_v2(DB, deletequery, -1, &statement, NULL) != SQLITE_OK) 
{
   NSLog(@"deletedSuccessfully");    
}

您可以在NSLog打印!= SSQLITE_OK。因此,上面的逻辑表明,当从表中删除行时,如果出现错误,则会打印成功的消息。这是一个矛盾,如果你在上述条件下做了任何事情,那么因为你的比较是错误的,它就不会生效。

用以下内容替换上述条件:

if (sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK) {
   if (sqlite3_step(statement) == SQLITE_DONE) {
      sqlite3_reset(statement);
   }
   else {
      const char *error = sqlite3_errmsg(database);
      strError = [NSString stringWithUTF8String:error];
      NSLog(@"Error : %@",strError);
   }
} else {
   NSLog(@"Error while deleting record");
}

答案 1 :(得分:0)

仅当您的视图不是复杂视图时,才会从视图中删除。

例如,如果视图实际上是一个连接,它们只能用于查询。删除更新等不会工作