如何使用sqlite中的数据加载UITableView?

时间:2015-04-17 09:07:35

标签: ios objective-c iphone

如何将sqlite db中的所有值显示在UITableView中?我的解决方案只显示一个值。这就是我尝试过的:

- (NSMutableArray *)loadData {
    NSLog(@"display");
    sqlite3_stmt    *statement;
    const char *dbpath = [_databasePath UTF8String];
    arrayOfperson = [[NSMutableArray alloc]init];

    if (sqlite3_open(dbpath, &_DB) == SQLITE_OK)
    {
        NSString *querySQL = [NSString stringWithFormat:@"SELECT * FROM iApp"];
        sqlite3_stmt *statement;
        const char *query_stmt = [querySQL UTF8String];
        NSMutableArray *resultArray = [[NSMutableArray alloc]init];

        if (sqlite3_prepare_v2(_DB,query_stmt, -1, &statement, NULL) == SQLITE_OK)
        {
            if (sqlite3_step(statement) == SQLITE_ROW)
            {
             /*


             NSLog(@"%@", aname);


               Results * aRv= [[Results alloc] init];
              [aRv setName:aname];

               NSLog(@"%@", aname);


            [arrayOfperson addObject:aRv];
              NSLog(@"%@ values of array",arrayOfperson );
               return resultArray;
            }
            else{
                NSLog(@"Not found");
                // return nil;
            }
            sqlite3_reset(statement);
        }
    }
  return arrayOfperson;
    //[self.arrayOfperson reloadData];
}

2 个答案:

答案 0 :(得分:0)

您需要仔细阅读SQLite C Documentation,其中列出了将数据提取并插入SQLite数据库所需的所有基本功能。

您的代码中似乎缺少对sqlite_column_x()的调用,这是您用来从sqlite语句中提取数据的函数。

E.g。

while (sqlite_step(statement) != SQLITE_DONE) { // Could have while(sqlite_step(statement) == SQLITE_ROW) here...
    int myInt = sqlite_column_int(statement, 0); // Get int from column 1
    char *myText = sqlite_column_text(statement, 1); // Get text from column 2

    MyObj *obj = [MyObj objWithNum:myInt, text:[[NSString alloc] initWitCString:myText]];
    [myArray addObject:obj];
}

一旦您完成statement,您需要致电sqlite_finalize(statement)。同样,在您完成数据库引用后,您需要调用sqlite_close(db);

答案 1 :(得分:0)

好的,让我们这么长但很简单。

首先,你必须得到FMDatabase,如果你不想把子弹放在头脑中那么这是必须的。

一旦你完成了这个设置(如果你是初学者,那将是你大约1或2个小时,这是你的第一次),你将创建一个处理你数据库的课程。

在该课程中,您将拥有不同的加载/设置方法,一个是您现在需要的方法,它将返回您需要的NSMutableArray个对象。

NSMutableArray *myObjects = [[NSMutableArray alloc]init];
FMResultSet *result = [db executeQuery:@"SELECT * FROM myTable"];
while ([result next]) {

    MyObj *obj      = [[MyObj alloc]init];
    obj.intNum      = [[results intForColumn:@"theNumColumn"]intValue];
    obj.nsnumberNum = [results intForColumn:@"theNSNumberColumn"];
    obj.theString   = [results stringForColumn:@"myString"];

    [myObjects addObject:obj];

}

return myObjects;

这将为您提供一个可靠的自定义对象数组,您可以将其发送到您的tableview。

必须将此数组提供给delegate的不同datasourcetableview方法,以便它可以知道要显示的内容,如何显示它以及显示多少它应该显示。

从那里开始它的蛋糕。但我非常强烈建议使用FMDB,这是一个非常好的库,可以让你的生活比sqlite3更容易百倍

(如果你希望你的生活更容易一百倍,我建议你切换到核心数据)

但不管怎样,是的:

  • 管理数据库的类
  • 返回自定义obj数组的方法
  • 将该阵列返回显示控制器
  • 吃饼干。