Iphone 如何从sqlite中删除数据

Iphone 如何从sqlite中删除数据,iphone,sqlite,Iphone,Sqlite,我创建了一个表,其中有三个条目:姓名、地址和电话号码。 现在,我想根据我在“名称”文本字段中键入的名称删除数据。我成功地做到了这一点,但问题是,如果我键入的名称不在我的数据库标签中,仍然显示“联系人已删除”。。。这是我的密码 -(void)deleteContact{ const char *dbPath=[databasePath UTF8String]; sqlite3_stmt *statement; if (sqlite3_open(dbPath

我创建了一个表,其中有三个条目:姓名、地址和电话号码。 现在,我想根据我在“名称”文本字段中键入的名称删除数据。我成功地做到了这一点,但问题是,如果我键入的名称不在我的数据库标签中,仍然显示“联系人已删除”。。。这是我的密码

   -(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); 

            status.text=@"Contact Deleted"; 
    name.text=@"";
    address.text=@"";
    phone.text=@"";

        sqlite3_finalize(statement);

    }
sqlite3_close(contactDB);

[name resignFirstResponder];
}
从表中删除,其中name=“NameToDelete”
将从表格YourTable中删除字段名等于NameToDelete的所有记录。

从表格中删除,其中name=“NameToDelete”

将从表YourTable中删除字段名等于NameToDelete的所有记录。

即使没有要删除的内容,也可以删除。 如果您需要知道是否有要删除的内容,请选中此项

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
}

即使没有要删除的内容,删除也可以。 如果您需要知道是否有要删除的内容,请选中此项

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
}


谢谢,但我的问题是,即使我键入了一个不在数据库中的名称,状态仍然显示联系人已删除。Mukesh,这可能是因为“sqlite3_步骤(语句)==SQLITE_OK”在您触发的查询没有错误且逻辑正确的情况下给出了肯定的结果。它不会检查您的查询是否删除了任何记录。您的查询是正确的,因此每次都返回OK状态。即使在您发送数据库中没有的姓名时,您也在执行正确的操作。我想,您必须使用其他标志而不是SQLITE_OK来将您的状态设置为“联系人已删除”。Dip Dhingani,您能给我一个代码来解决我的问题吗…谢谢。我想在您的情况下,在通过删除查询后,比如name='xyz'。您必须传递一个搜索相同名称的select查询。如下所示:选择*form contacts where name=“xyz”,然后使用标志SQLITE\u NOTFOUND进行检查。当找不到表或记录时,将返回12。我希望这会有所帮助。谢谢,但我的问题是,即使我键入了一个不在数据库中的名称,状态仍然显示联系人已删除。Mukesh,这可能是因为“sqlite3_步骤(语句)==SQLITE_OK”在您触发的查询没有错误且逻辑正确的情况下给出了肯定的结果。它不会检查您的查询是否删除了任何记录。您的查询是正确的,因此每次都返回OK状态。即使在您发送数据库中没有的姓名时,您也在执行正确的操作。我想,您必须使用其他标志而不是SQLITE_OK来将您的状态设置为“联系人已删除”。Dip Dhingani,您能给我一个代码来解决我的问题吗…谢谢。我想在您的情况下,在通过删除查询后,比如name='xyz'。您必须传递一个搜索相同名称的select查询。如下所示:选择*form contacts where name=“xyz”,然后使用标志SQLITE\u NOTFOUND进行检查。当找不到表或记录时,将返回12。我希望这有帮助。@valeriy。。多谢各位much@MUKESH不用谢。投票选出最适合你的答案。@developer新手,当我获得prpare_v2失败时,你能发布正确的代码吗)谢谢advance@EshwarChaitanya,你知道你必须在代码的第一行输入正确的SQL命令吗?如果没有这样的表“contacts”或其中没有这样的列“name”等等,sqlite3\u prepare\u v2可能会失败。输入适用的SQL命令。@ValeriyVan我已经根据我创建的表名和als更新了代码o我有一个名为“name”的专栏,但我仍然面临着这个问题,请你引导我走向正确的方向,提前问候和感谢:)@valeriy..非常感谢much@MUKESH别提了。投票选出最适合你的答案。@developer新手你能不能在我获得prpare_v2失败时发布正确的代码:)谢谢advance@EshwarChaitanya,你知道你必须在代码的第一行输入正确的SQL命令吗?如果没有这样的表“contacts”或其中没有这样的列“name”等等,sqlite3\u prepare\u v2可能会失败。输入适用的SQL命令。@ValeriyVan我已经根据我创建的表名和als更新了代码o我有一个名为“name”的专栏,但我仍然面临着这个问题,请您引导我走向正确的方向,提前问候和感谢:)