Как удалить данные из sqlite - PullRequest
1 голос
/ 13 сентября 2011

Я создал таблицу с тремя записями: имя, адрес и номер телефона. Теперь я хочу удалить данные, основанные на имени, которое я печатаю в текстовом поле имени. Я успешно это делаю, но проблема в том, что, если я набираю имя, которого нет в метке базы данных, все равно отображается сообщение «контакт удален» ... Вот мой код

   -(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];
}

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Удалить можно, даже если нечего удалять.Если вам необходимо узнать, есть ли что-то, что нужно удалить, проверьте это.

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
}
2 голосов
/ 13 сентября 2011

удалить из таблицы, где name = "NameToDelete"
удалит все записи с именем поля, равным NameToDelete, из таблицы YourTable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...