ios - FMDB stringForColumn 返回 nil

标签 ios nsmutabledictionary fmdb

我正在遍历从 SQLite3 数据库生成的 FMDB 结果集,创建对象供以后使用。 数据内容由不同的用户使用不同的文本编辑器和编码创建。

一些记录有问题,即使列中有文本,列值也返回 nil。

例如,当我运行命令行查询时,我看到了数据库中一列的文本,但 FMDB 方法 stringForColumn 返回 nil。我还看到潜在的原因是列内容中的高 ascii 字符,这很可能是由用户从 MS Word 复制和粘贴文本得到的。我的问题是处理这种类型的“脏”数据的最佳方法是什么,意识到数据库中的某些数据可能具有这些字符?

enter image description here

NSMutableDictionary *words = [[NSMutableDictionary alloc] init];
FMResultSet *rs = [db executeQuery:@"SELECT * FROM `foo` WHERE 1"];

while ([rs next]) {
    Word *myWord = [[Word alloc] init];  

    //Coming in as a nil value eventhough there is text in the database column
    [myWord setDefinition:[rs stringForColumn:@"definition"]];

    [words setObject:[myWord definition] forKey:[myWord term]];
}

最佳答案

即使您有不同的用户从多个文本编辑器和编码输入代码,他们也必须标准化为数据库设置的编码。 看起来这可能与 FMDB 没有正确处理存储在数据库中的编码转换有关。也许因为你知道数据的编码,你可以拉 内容并自己“翻译”?尝试使用 dataForColumn 或 UTF8StringForColumnIndex 直接提取数据,看看会得到什么。

顺便说一句,“where”并没有错,但我会说它是多余的。我还要补充一点,因为它没有任何用处,它可能会误导或混淆那些不那么流利的 sql 的人。

关于ios - FMDB stringForColumn 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873379/

相关文章:

iphone - 如何就地交换 `NSMutableDictionary` 键和值?

iphone - 如何使用FMDB从表中删除所有数据

ios - FMResultSet 在另一个 ViewController 中返回 nil

ios - 如何使用 executeUpdate 插入新行 - FMdatabase

ios - 来自 Visual Studio 的 Xamarin.ios Today 扩展

ios - 在 Swift iOS 中添加工具提示指针

ios - MagicalRecord 不保存

iphone - 如何检测 NSTimer 每分钟更改的时间?

ios - NSMutableDictionary VS NSMutableArray 速度

ios - 如何在 NSMutableDictionary 中添加对象