如何将结果从sqlite设置为数组NSMutableArray

时间:2015-04-21 05:00:44

标签: ios sqlite

这是我的代码:

NSString *ask = [NSString stringWithFormat:@"SELECT name FROM users"];
    sqlite3_stmt *statement;
    const char *query_statement = [ask UTF8String];
    const char *dbpath = [_databasePath UTF8String];
    if (sqlite3_open(dbpath, &_DB) == SQLITE_OK){
        {
            if (sqlite3_prepare_v2(_DB, query_statement, -1, &statement, nil) == SQLITE_OK)
            {
                while (sqlite3_step(statement) == SQLITE_ROW)
                {
                    NSString *nameField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];

                }

                sqlite3_finalize(statement);
                sqlite3_close(_DB);
            }
        }

我想将上面的结果设置为NSMUtableArray,如下例所示:

 totalStrings =[[NSMutableArray alloc]initWithObjects:@"xxx",@"xxx",@"xxx", nil];

我该怎么办?

=================更新日期所有代码======================= 这是便于查看的aditonal代码。我真的不知道我做错了什么。

@interface ViewController ()
{
    NSMutableArray *totalStrings;
    NSMutableArray *filteredStrings;
    BOOL isFiltered;
}
@property(strong, nonatomic)NSMutableArray *entries;


@end


@implementation ViewController;
@synthesize entries;


- (void)viewDidLoad {



  //  totalStrings =[[NSMutableArray alloc]initWithObjects:@"ggg",@"gggggg", nil];
  //  NSLog(@"%@",totalStrings);


    NSMutableArray* result=[[NSMutableArray alloc] init];

    NSString *ask = [NSString stringWithFormat:@"SELECT * FROM users"];
    sqlite3_stmt *statement;
    const char *query_statement = [ask UTF8String];
    const char *dbpath = [_databasePath UTF8String];
    if (sqlite3_open(dbpath, &_DB) == SQLITE_OK){
        {
            if (sqlite3_prepare_v2(_DB, query_statement, -1, &statement, nil) == SQLITE_OK)
            {
                while (sqlite3_step(statement) == SQLITE_ROW)
                {
                    NSString *nameField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];

                    //add your namefield here.
                    [result addObject:nameField];
                     totalStrings=[[NSMutableArray alloc] initWithArray:result];



                }

                sqlite3_finalize(statement);
                sqlite3_close(_DB);
            }
        }
        NSLog(@"%@",totalStrings);

        //AND PUT THOSE RESULTS INTO THIS ARRAY ( I WILL USE THIS LATER)
        //I want it to be this format:  totalStrings=[[NSMutableArray alloc]initWithObjects:@"test1",@"test2",@"test3", nil];


    }

3 个答案:

答案 0 :(得分:0)

创建并分配新的NSMutableArray totalStrings并在While循环的totalStrings中添加nameField。

NSMutableArray *totalStrings = [[NSMutableArray alloc] init];

在while循环中

[totalStrings addObject:nameField];

答案 1 :(得分:0)

以下代码适用于您希望获取数组

中的所有名称字段的情况
NSMutableArray* result=[[NSMutableArray alloc] init];

    NSString *ask = [NSString stringWithFormat:@"SELECT name FROM users"];
        sqlite3_stmt *statement;
        const char *query_statement = [ask UTF8String];
        const char *dbpath = [_databasePath UTF8String];
        if (sqlite3_open(dbpath, &_DB) == SQLITE_OK){
            {
                if (sqlite3_prepare_v2(_DB, query_statement, -1, &statement, nil) == SQLITE_OK)
                {
                    while (sqlite3_step(statement) == SQLITE_ROW)
                    {
                        NSString *nameField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];

                        //add your namefield here.
                       [result addObject:nameField];
                    }

                    sqlite3_finalize(statement);
                    sqlite3_close(_DB);
                }
            }

最后你可以做到

totalStrings=[[NSMutableArray alloc] initWithArray:result];

答案 2 :(得分:0)

你可以这样做,

-(NSArray *)list_totalStrings
{
    NSMutableArray *totalStrings = [[NSMutableArray alloc] init];
    NSString *ask = [NSString stringWithFormat:@"SELECT name FROM users"]; //Make sure field and table names are proper
    sqlite3_stmt *statement;
    const char *query_statement = [ask UTF8String];
    const char *dbpath = [_databasePath UTF8String];
    if (sqlite3_open(dbpath, &_DB) == SQLITE_OK){
        if (sqlite3_prepare_v2(_DB, query_statement, -1, &statement, nil) == SQLITE_OK)
        {
            while (sqlite3_step(statement) == SQLITE_ROW)
            {
                NSString *nameField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];
                [totalStrings addObject:nameField];
            }

            sqlite3_finalize(statement);
            sqlite3_close(_DB);
            NSLog(@"%@",totalStrings);
            return totalStrings;
        }
        else
            return nil;
    }
    else
        return nil;
}