Mac OS编程中的SQLite

时间:2012-12-07 13:19:48

标签: database macos cocoa sqlite

我是Mac OS编程的新手,在我的mac os项目中集成SQLite数据库面临问题。

+ (void) getInitialDataToDisplay:(NSString *)dbPath {

    AppDelegate* appDelegate = (AppDelegate *)[[NSApplication sharedApplication] delegate];


    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

        const char *sql = "select * from MyTable";
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

            NSLog(@"sqlite3_step(selectstmt)=%d",sqlite3_step(selectstmt));
            NSLog(@"SQLITE_ROW= %d",SQLITE_ROW);

            while(sqlite3_step(selectstmt) == SQLITE_ROW) {

                NSInteger PrimaryKey = sqlite3_column_int(selectstmt, 0);
                DatabaseInfo *databaseObj = [[DatabaseInfo alloc] initWithPrimaryKey:PrimaryKey];
                databaseObj.item1 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
                databaseObj.item2 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];


                [appDelegate.mutablearray_Database addObject:databaseObj];

                [databaseObj release];
            }
        }
    }
    else
        sqlite3_close(database);

}

在上面的方法中,控制器从未进入while循环。这就是为什么我无法从数据库中获取数据。

任何人都可以帮助我吗?

请建议我使用Mac OS编程实现SQLite数据库的任何示例代码。

1 个答案:

答案 0 :(得分:1)

首先,我想指出,最好是使用CoreData(苹果公司自己实现的sqlite,非常强大和高效,尽管你必须阅读一些文档才能包装你的脑袋围绕类)或FMDB,这是一个经过严格测试的SQLite Objective-C包装器,FMDB on github

其次,您的桌子中有多少行可用?由于NSLog也调用了sqlite3_step(),它可能只是跳过你实际拥有的唯一一行..其余的实现大致看起来就像我在我的一些旧项目中所做的那样,例如:

sqlite3_stmt *statement = nil;
if( sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK )
{
     while( sqlite3_step(statement) == SQLITE_ROW )
     {
          // get column data..
     }
}
sqlite3_finalize(statement);