使用FMDB从SQLite数据库中删除行

ric*_*ick 3 sqlite cocoa objective-c fmdb

我觉得我已经阅读了FMDB的文档一百万次.我不知道为什么这个代码不起作用 - 我已经尝试了executeUpdate方法和executeMethodWithFormat及其相应的格式,似乎都不起作用._dbArray是一个dictionarys数组.这些行返回正确的值 - 如果我复制并粘贴结果并在终端中运行查询,它将删除记录正常.我错过了明显的东西吗?

- (IBAction)deleteDbEntry:(id)sender {

    // get selected row
    NSInteger row = [_dataTable selectedRow];

    // get the entry number
    NSString *idToDelete = [[_dbArray objectAtIndex:row] valueForKey:@"entryColumn"];

    // open DB for writing
    if (![db open]) {
        [db open];
    }

    [db executeUpdate:@"DELETE FROM tbl1 WHERE entry = ?", idToDelete];

    // close DB
    if ([db open]) {
        [db close];
    }

    [_dataTable reloadData];

    return;
}
Run Code Online (Sandbox Code Playgroud)

更新:我已经采纳了你的建议,它仍然没有工作,我不知道为什么.数据库的打开和关闭现在正在其他地方发生(谢谢@ccgus),我正在将字符串转换为NSNumber(感谢@bryanmac).在NSLog(@"myNumber is %@", myNumber);调用返回正确的号码,我可以证实,删除没有发生.的NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);是报告没有任何错误(Error 0: (null)).我也尝试过:

[db executeUpdateWithFormat:@"DELETE FROM tbl1 WHERE entry = %@", myNumber];

[db executeUpdate:@"DELETE FROM tbl1 WHERE id = ?", [NSNumber numberWithInt:myNumber]];

第一个似乎应该工作,但我已经确认它不会删除该行.我的第二个错误是"与指针转换不兼容的整数".我错过了什么?

- (IBAction)deleteDbEntry:(id)sender {

    // get selected row
    NSInteger row = [_dataTable selectedRow];

    // get the entry number
    NSString *idToDelete = [[_dbArray objectAtIndex:row] valueForKey:@"entryColumn"];

    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber *myNumber = [f numberFromString:idToDelete];
    NSLog(@"myNumber is %@", myNumber);

    [db executeUpdate:@"DELETE FROM tbl1 WHERE entry = ?", myNumber];
    NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);

    [_dataTable reloadData];

    return;
} 
Run Code Online (Sandbox Code Playgroud)

bry*_*mac 6

你的id是int吗?

如果是这样,请尝试将NSNumber传递给格式化的更新语句.

这篇文章可以将NSString转换为NSNumber.

如何将NSString转换为NSNumber

 [db executeUpdate:@"DELETE FROM tbl1 WHERE entry = ?", idNumber];
Run Code Online (Sandbox Code Playgroud)

这是一篇相关的帖子:

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

另外,请确保在发言后检查错误:

NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);
Run Code Online (Sandbox Code Playgroud)