2011-09-13 56 views
1

我创建了一个包含三个条目名称,地址和电话号码的表格。 现在我想删除基于姓名文本字段中输入姓名的数据。我成功地这样做,但问题是,如果我键入一个名称,这是不是在我的数据库标签仍然显示“删除联系人” ......这里是我的代码如何从sqlite中删除数据

-(void)deleteContact{ 
     const char *dbPath=[databasePath UTF8String]; 
     sqlite3_stmt *statement; 
     if (sqlite3_open(dbPath, &contactDB)==SQLITE_OK) 
      { 

    NSString *querySQL=[NSString stringWithFormat:@"delete from 
       contacts where name=\"%@\"",name.text]; 
    const char *query_stmt=[querySQL UTF8String]; 
     sqlite3_prepare_v2(contactDB, query_stmt,-1,&statement, NULL); 
     (sqlite3_step(statement)==SQLITE_OK); 

      [email protected]"Contact Deleted"; 
    [email protected]""; 
    [email protected]""; 
    [email protected]""; 

     sqlite3_finalize(statement); 

    } 
sqlite3_close(contactDB); 

[name resignFirstResponder]; 
} 

回答

2

删除就OK即使没有要删除。 如果你需要知道是否有什么东西要删除,你应该检查一下。

NSString *sql = [NSString stringWithFormat:@"select count (*) from contacts where name=\"%@\"", name.text]; 
sqlite3_stmt *stmt; 
int res = sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt, NULL); 
if (res != SQLITE_OK) { 
    NSLog(@"sqlite3_prepare_v2() failed"); 
    return; 
} 
int count = 0; 
if (sqlite3_step(stmt) == SQLITE_ROW) { 
    count = sqlite3_column_int(stmt, 0); 
} 
sqlite3_finalize(stmt); 

if (count == 0) { 
    // nothing to delete, do whatever you like 
} else { 
    // do real delete 
    // your code for that seems to be OK 
} 
+0

@valeriy ..非常感谢 – NoviceDeveloper

+0

@MUKESH不要提及它。投票回答哪个更适合你。 –

+0

@NoviceDeveloper能否请你出任我越来越prpare_v2提前 –

2

从YourTable其中name =“NameToDelete删除“
将从表YourTable中删除字段名称等于NameToDelete的所有记录。

+0

谢谢,但我的问题是,即使我输入一个名称,这是不是在我的数据库中,状态仍显示联系人删除。 – NoviceDeveloper

+1

Mukesh,也许这是因为“sqlite3_step(语句)== SQLITE_OK”给出了一个积极的结果,如果你发射的查询没有错误并且是逻辑上正确的。它不检查你的查询是否删除了任何记录。您的查询是正确的,因此每次都会返回OK状态。即使在您发送不在数据库中的名称的时候,您也正在执行正确的操作。 –

+0

我想,您必须使用其他标志而不是SQLITE_OK将您的状态设置为“联系已删除”。 –