Невозможно удалить строку из базы данных SQLite, но ошибки не выдаются - PullRequest
1 голос
/ 29 ноября 2010

Я использую то, что, согласно моему отладчику XCode, является правильным синтаксисом для удаления строки из таблицы в моем проекте.Однако, когда я возвращаюсь, чтобы проверить свою базу данных, она все еще существует.Мой другой синтаксис SQL для вставки записей правильный, поэтому я не уверен, что делаю неправильно.NSLogs подтверждают, что обе переменные отправляются правильно:

    -(void) deleteSelectedRowFromTable: (NSString *) tableName cityName:(NSString *)city 
{

[self openDB];
NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM %@ WHERE city LIKE %@", tableName, city];
const char *sql = [sqlStr UTF8String];
sqlite3_stmt *statement;

if (sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK) {
    NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(db));
}

sqlite3_finalize(statement);
sqlite3_close(db);

}

Ответы [ 3 ]

1 голос
/ 29 ноября 2010

Попробуйте это утверждение

NSString * sqlStr = [NSString stringWithFormat: @ "УДАЛИТЬ ИЗ '% @' ГДЕ НРАВИТСЯ город '% @ %%'", tableName, city];

1 голос
/ 29 ноября 2010

Убедитесь, что операндом LIKE является строка (должна быть заключена в кавычки).Я никогда не использовал XCode, но если вы измените свою 5-ю строку следующим образом:

NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM %@ WHERE city LIKE '%@'", tableName, city];

Это работает?

0 голосов
/ 29 ноября 2010

вы только что подготовили утверждение, вы должны сделать это заявление.

-(void) deleteSelectedRowFromTable: (NSString *) tableName cityName:(NSString *)city 
{

[self openDB];
NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM %@ WHERE city LIKE %@", tableName, city];
const char *sql = [sqlStr UTF8String];
sqlite3_stmt *statement;

if (sqlite3_prepare_v2(db, sql, -1, &statement, nil) != SQLITE_OK) 
{
      /**this one will execute when there is error in your query**/
    NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(db));
}
else
{
     /************just add this one****************/
     sqlite3_step(statement);
}

sqlite3_finalize(statement);
sqlite3_close(db);

}

Я надеюсь, что это поможет вам.

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