即使db中有数据,sqlite3_column_text也只返回255个字节

时间:2012-04-30 20:15:30

标签: ios sqlite fmdb

女士和男士,

我在iOS应用程序中使用FMDB。我的列中有一些超过255个字节的文本。我使用BASE并浏览数据库文件,我可以在列中查询数据的长度...所以我知道我的数据是存在的,并且它长于255 ...

但是,当我试图从这些列中提取数据时,我总是得到一个正好是255字节的C字符串,而且我不知道为什么会这样做。

这是一段代码(基本上来自 - (NSString *)stringForColumnIndex:(int)columnIdx {  FMDB FMResultSet.m,我可以捕获错误。

- (NSString*)stringForColumnIndex:(int)columnIdx {

if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) {
    return nil;
}

const char *c = (const char *)sqlite3_column_text([_statement statement], columnIdx);

int xx = strlen(c); //added by me, already here it is only 255 bytes


if (!c) {
    // null row.
    return nil;
}
return [NSString stringWithUTF8String:c];
}

我错过了什么?我使用标准提供的libsqlite3.dylib,FMDB包含sqlite.h。我试图谷歌类似的问题现在无济于事。

1 个答案:

答案 0 :(得分:0)

这既不是FMDB也不是SQLite限制。我使用FMDB一直从我的SQLite数据库返回超过255个字符的字符串。我刚检查过:

    FMResultSet *rs = [fmdb executeQuery:@"select personnel_description from personnel where personnel_id=297"];
    [rs next];
    NSString *test2 = [rs stringForColumnIndex:0];
    NSLog(@"%s len=%d string=%@", __FUNCTION__, [test2 length], test2);
    [rs close];

我得到了8429字符串,BASE告诉我它的长度相同。

这让我想知道你的数据是否有些奇怪(例如二进制数据而不是字符,DBCS等)。您是否尝试过返回作为对象而不是字符串并进行检查?也许确认它是NSString而不是NSData结果集,例如:

    id test3 = [rs objectForColumnIndex:0];
    if ([test3 isKindOfClass:[NSString class]])
        NSLog(@"It's a string");
    else
        NSLog(@"It's not");

如果您确实认为这是FMDB问题,可以尝试在FMDB discussion发布此问题。此外,我确保您拥有最新的FMDB代码,您可以从同一站点检索该代码。