2012-02-25 94 views
0

当我尝试从我的iPhone应用程序中删除一行时,我可以正确地获取该标识,但该行不会被删除。Sqlite行不删除

-(void)delete_profile:(NSString *)mID { 

    NSLog(@"menuID: %@",mID); 
    sqlite3 *database; 
    sqlite3_stmt *deleteStmt=nil; 
    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 
    if(deleteStmt == nil) { 
     const char *sql = "delete from item where menuid = ?"; 
     if(sqlite3_prepare_v2(database, sql, -1, &deleteStmt, NULL) != SQLITE_OK) 
      NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(database)); 
    } 

    //When binding parameters, index starts from 1 and not zero. 
    sqlite3_bind_int(deleteStmt, 1, [mID integerValue]); 

    if (SQLITE_DONE != sqlite3_step(deleteStmt)) 
     NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(database)); 

    sqlite3_reset(deleteStmt);  
    } 
    sqlite3_close(database); 

} 
+0

所以......任何你得到什么错误,如果?或者它返回好,不删除任何东西? – 2012-02-25 07:17:31

+0

没有错误发生,但没有被删除。我认为在将menuid传递给删除命令时出现了一些错误 – nithin 2012-02-25 07:19:46

+0

看不到任何明显错误的代码。以这种方式结束时,mID的内容是什么? – 2012-02-25 07:31:50

回答

7

请检查您的menuid数据类型。并结合之前准备或使用像例如

if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 

    NSString *sql = [NSString stringWithFormat:@"delete from item where menuid =%d",[mID intValue]]; 

       const char *del_stmt = [sql UTF8String]; 

       sqlite3_prepare_v2(contactDB, del_stmt, -1, & deleteStmt, NULL); 
       if (sqlite3_step(deleteStmt) == SQLITE_DONE) 
       { 

       } else { 

       } 
       sqlite3_finalize(deleteStmt); 
       sqlite3_close(contactDB); 


} 
+0

你在代码中声明了deleteStmt – Muralikrishna 2014-07-19 04:51:28

0

下面必须检查你的DBPATH和数据库名称(区分大小写)

-(void)delete_profile:(NSString *)mID { 
{ 
    NSString *sql_str=[NSString stringWithFormat:@"DELETE FROM item where menuid = %d",[mID intValue]]; 
    const char *sql = [sql_str UTF8String]; 

    sqlite3 *database; 

    if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    { 
     sqlite3_stmt *deleteStmt; 
     if(sqlite3_prepare_v2(database, sql, -1, &deleteStmt, NULL) == SQLITE_OK) 
     { 

      if(sqlite3_step(deleteStmt) != SQLITE_DONE) 
      { 
       NSLog(@"Error: %s", sqlite3_errmsg(database)); 
      } 
      else 
      { 
       // NSLog(@"row id = %d", (sqlite3_last_insert_rowid(database)+1)); 
        NSLog(@"No Error"); 
      } 
     } 
     sqlite3_finalize(deleteStmt); 
    } 
    sqlite3_close(database); 
}