2012-12-07 83 views
0

我是Mac OS編程新手,面臨將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

首先,我想指出的是,最好或者是使用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); 
+0

+1使用FMDB。另外,我建議OP設置一個斷點以更好地理解發生了什麼。 – paulmelnikow

+0

我寫的另一個包裝位於這裏:https://github.com/AaronBratcher/ABSQLite 它具有用更傳統的數據庫方式訪問SQLite的類,我覺得這使得事情變得更容易。 –