【问题标题】:FMDB stringForColumn Returning nilFMDB stringForColumn 返回 nil
【发布时间】:2012-10-10 02:38:03
【问题描述】:

我正在循环访问从 SQLite3 数据库生成的 FMDB 结果集,创建对象以供以后使用。 数据内容由各种用户使用各种文本编辑器和编码创建。

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

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

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

【问题讨论】:

    标签: ios nsmutabledictionary fmdb


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您的 select 语句中的“Where”不正确。

      【讨论】:

      • 不,不是。我建议您查看 SQL 规范或直接自己运行。
      猜你喜欢
      • 1970-01-01
      • 2011-09-20
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2013-02-18
      • 2019-06-20
      • 2017-12-16
      相关资源
      最近更新 更多