gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:35 24 4
gpt4 key购买 nike

我觉得我已经阅读了 FMDB 的文档一百万遍了。我不确定为什么这段代码不起作用 - 我已经尝试了 executeUpdate 方法和 executeMethodWithFormat 及其相应的格式,但似乎都不起作用。 _dbArray 是一个字典数组。这些行返回正确的值 - 如果我复制并粘贴结果并在终端中运行查询,它会很好地删除记录。我是否遗漏了一些明显的东西?

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

更新:我已经采纳了您的建议,但仍然无法正常工作,我不确定为什么。数据库的打开和关闭现在正在其他地方发生(谢谢@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;
}

最佳答案

你的id是int吗?

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

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

How to convert an NSString into an NSNumber

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

这是一篇相关的文章:

How to delete a row in a sqlite database table?

此外,请确保在语句后检查错误:

NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);

关于objective-c - 使用 FMDB 从 SQLite 数据库中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com