我正在使用FMDB。我创建并插入表中。它工作正常。
idx INTEGER NOT NULL DEFAULT 0 PRIMARY KEY AUTOINCREMENT
topicId Varchar NOT NULL
listChat BLOB NOT NULL
但是我无法从listChat中获取所有数据。这是我的代码:
- (NSMutableArray*)readChatHistoryFromDatabaseWithTopicId:(NSString *)topicId {
NSMutableArray *listChat = [[NSMutableArray alloc] init];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *path = [self databasePath];
if ([fileManager fileExistsAtPath:path] == YES) {
FMDatabase *database = [FMDatabase databaseWithPath:path];
if (database) {
[database open];
NSString *query = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE topicId=\"%@\"", OCSDK_CHAT_HISTORY_TABLE_NAME, topicId];
FMResultSet *results = [database executeQuery:query];
[results next];
NSData *notesData = [results dataForColumn:@"listChat"];
[listChat addObject:notesData];
NSLog(@"notes: %@", listChat);
}
[database close];
}
return listChat;
}
打印:
我的代码出了什么问题?
答案 0 :(得分:0)
代码更改:
- (NSMutableArray*)readChatHistoryFromDatabaseWithTopicId:(NSString *)topicId {
NSMutableArray *listChat = [[NSMutableArray alloc] init];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *path = [self databasePath];
if ([fileManager fileExistsAtPath:path] == YES) {
FMDatabase *database = [FMDatabase databaseWithPath:path];
if (database) {
[database open];
NSString *query = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE topicId=\"%@\"", OCSDK_CHAT_HISTORY_TABLE_NAME, topicId];
FMResultSet *results = [database executeQuery:query];
while([results next]) {
NSString *noteString = [results stringForColumn:@"topicId"]
[listChat addObject: noteString];
NSLog(@"notes: %@", listChat);
}
}
[database close];
}
return listChat;
}
您正在从密钥NSData
的数据库中获取topicId
值。您需要获取NSString
值。检查上面的代码。
答案 1 :(得分:0)
看起来notes数组有一个NSData对象用于记录,因此您的代码没有任何问题。但我猜你想要topicId字符串,而是使用[results stringForColumn@"topicId"]
。