如何删除sqlite数据库表中的行?

时间:2009-11-08 11:05:02

标签: iphone sqlite fmdb

我正在使用fmdb来管理我的数据库。我找不到任何从fmdb中的表中删除行的示例。我试过了

  NSString *sqlStat=@"DELETE from tableName WHERE id=3";    
  FMResultSet *rs = [database executeQuery:sqlStat];

但是它不起作用,因为当我检查表中的条目总数时,我得到的数字与执行上述语句之前的数字相同。 那么,使用fmdb从表中删除行的正确方法是什么?

4 个答案:

答案 0 :(得分:12)

如果你不把对象作为NSNumber传递,那么FMDB可能有点挑剔。这是格式化查询的受支持且安全的方式。

[db executeUpdate:@"DELETE FROM theTable WHERE id = ?", [NSNumber numberWithInt:myObject.id]];

答案 1 :(得分:11)

你应该替换:

... [数据库executeQuery:sqlStat] ...

使用:

... [数据库executeUpdate:sqlStat];

另外,请尝试添加:

[database beginTransaction];
在CRUD阻止之前

,并且:

[database commit];

执行更新/删除/插入操作后。

答案 2 :(得分:1)

我也遇到了同样的症状。 我的问题是我没有打电话(并导致“内存不足”错误)

[db open];

请务必执行此操作以调试您的fmdb问题 db.traceExecution = YES; db.logsErrors = YES;

答案 3 :(得分:0)

您需要确保所有流程

NSString *query = @"delete from places where published = 1";
const char *sqlStatement = [query UTF8String];
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
    // Loop through the results and add them to the feeds array
    while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
        // Read the data from the result row
        NSLog(@"result is here");
    }

    // Release the compiled statement from memory
    sqlite3_finalize(compiledStatement);

}
int numberOfEffectedRow = sqlite3_changes(database);
return numberOfEffectedRow; // get number of effected rows