2014-11-09 44 views
2

我在我的iOS項目中使用了FMDB。但是當我用FMDB讀取ROWID時,Xcode日誌「警告:我找不到名爲'rowid'的列。」警告:我找不到名爲'rowid'的列

... 
//Create database 
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"bookmarksDatabase.sqlite"]; 

    BOOL needCreateTable = ![[NSFileManager defaultManager] fileExistsAtPath:dbPath]; 
    FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; 
    [db open]; 
    if (needCreateTable) { 

     [db executeUpdate:@"CREATE TABLE bookmarks (title TEXT ,url TEXT ,folderID INTEGER ,locationIndex INTEGER)"]; 
    } 
    else 
    { 
     [self reloadBookmarkDatabase:db]; 

    } 

     [db close]; 

    ... 
    //Read database. Only "ROWID" column can't find. 
FMResultSet *results = [db executeQuery:@"SELECT * FROM bookmarks ORDER BY locationIndex"]; 
    while([results next]) { 
     BookmarkData *temp = [[BookmarkData alloc] initWithID:[results intForColumn:@"ROWID"] title:[results stringForColumn:@"title"] url:[results stringForColumn:@"url"] folderID:[results intForColumn:@"folderID"] locationIndex:[results intForColumn:@"locationIndex"]]; 
     [self.bookmarkArray addObject:temp]; 

     NSLog(@"bookmark id:%d, title:%@, url:%@, folderID:%d, locationIndex:%d",temp.ID,temp.title,temp.url,temp.folderID,temp.locationIndex); 
    } 

回答

5

SELECT *僅返回表定義中的列。

如果你想獲得rowid列,你必須明確地列出它:

SELECT *, rowid FROM ... 

如果你確實需要使用此列,這將是一個更好的主意,使它的一部分表格定義:

CREATE TABLE bookmarks (
    ID INTEGER PRIMARY KEY, -- same as rowid 
    title TEXT, 
    ... 
) 
+0

謝謝。我明白。 – 2014-11-09 09:21:05

相關問題