2011-07-05 40 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而不是%@)。 –