2011-07-05 64 views
3

我有我在iOS應用程序中創建的SQLite數據庫。一系列數字正被存儲在這個數據庫中。我想彙總整個列,並返回要在應用程序中顯示的數據。iOS SQLite總和檢索數據

寫入數據庫的所有內容都正常工作,但我試圖返回相加的數據。任何幫助將不勝感激。

-(void) dataReturn: (NSString *) tableNamed{ 
    NSString *myData = [NSString stringWithFormat:@"SELECT SUM(column1) AS data1 FROM myDB", tableNamed]; 

    sqlite3_stmt *statement; 

    if(sqlite3_prepare_v2(db, [myData UTF8String], -1, &statement, nil) ==SQLITE_OK){ 
     while (sqlite3_step(statement) == SQLITE_ROW){ 

      int *field2 = (int *) sqlite3_column_int(statement, 1); 

      NSString *myString =[[NSString alloc] initWithFormat:@"%@", field2]; 

     } 
    } 
} 

回答

4

你好彌敦道撥打電話作爲

[self dataReturn:@"Bill"]; 

運作

-(void)dataReturn:(NSString *)tableName{ 

    sqlite3 *database; 
    sqlite3_stmt *statement; 

    NSString *queryString = [NSString stringWithFormat:@"SELECT SUM(price) AS TOTAL FROM %@", tableName]; 

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

     if(sqlite3_prepare_v2(database, [queryString UTF8String], -1, &statement, nil) == SQLITE_OK){ 
      while (sqlite3_step(statement) == SQLITE_ROW) { 
        int field1 = sqlite3_column_int(statement, 0); 
        NSLog(@"The sum is %d ", field1); 
      } 
     } 
    } 
} 

會獲取你想要的數據。表「Bill」的模式是「CREATE TABLE Bill(price double,quantity INTEGER)」。獲取的結果將具有從「0」索引的列,所以我們爲第一列傳遞0。希望你能從中得到一些提示。乾杯!!

int field1 = sqlite3_column_int(statement, 0); 
3

sqlite3_column_int文檔:

結果集的最左邊的列的索引爲0

此外,該函數返回一個int,而不是一個int*。嘗試:

int field2 = sqlite3_column_int(statement, 0); 
+0

謝謝你的迴應,但我仍然得到一個0值,如果我跟蹤變量(我們查看了數據庫,並驗證我有在那裏的數據,我應該得到61作爲響應)... – Nathan

+0

myDB是數據庫中表的名稱嗎?我注意到你沒有在myData字符串中使用tableNamed參數。另外,除了除去字段2前面的指針*之外,還要確保在sqlite3_column_int函數中使用0而不是1作爲第二個參數。 (最後,請確保在initWithFormat方法中使用%d而不是%@)。 –