女士和男士,
我在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。我试图谷歌类似的问题现在无济于事。
答案 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代码,您可以从同一站点检索该代码。