无法使用FMDB读取数据

时间:2014-10-20 09:02:06

标签: ios sqlite fmdb

我正在使用FMDB。我创建并插入表中。它工作正常。

  

idx INTEGER NOT NULL DEFAULT 0 PRIMARY KEY AUTOINCREMENT

     

topicId Varchar NOT NULL

     

listChat BLOB NOT NULL

enter image description here

但是我无法从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;
}

打印:

enter image description here

我的代码出了什么问题?

2 个答案:

答案 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"]