将数据从sqlite数据库加载到表视图中

时间:2017-08-09 10:41:09

标签: ios objective-c database sqlite

我创建了名为' Mydatabase.db'在sqlites 3中使用终端和创建的表名为'条目'其中有三列(姓名,电子邮件,食物)。 我使用此代码与AppDelegate.m文件中的数据库连接

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.

        self.Peoples=[[NSMutableArray alloc]init ];
        self.databaseName = @"MyDatabase.db";
        NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentDir=[documentPaths objectAtIndex:0];
         self.databasePath=[documentDir stringByAppendingString:self.databaseName];

        [self CheckAndCreateDatabase];
        [self readDataFromDatabase];
        return YES;
    }

在上面的函数中我使用NSLog输出检查数据库文件的路径是空字符串。  然后我使用这些函数来获取数据 -

(void)CheckAndCreateDatabase
    {
        bool success;
        NSFileManager *fileManger=[NSFileManager defaultManager];
        success=[fileManger fileExistsAtPath:self.databasePath];
        if (success)
            return;
        NSString *databasePathFromApp=[[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:self.databaseName];
        [fileManger copyItemAtPath:databasePathFromApp toPath:self.databasePath error:nil];

    }

    -(void) readDataFromDatabase{
        [self.Peoples removeAllObjects ];
        sqlite3 *database;
        if(sqlite3_open([self.databasePath UTF8String], & database) ==SQLITE_OK)
        {
            char *sqlStatement="select * from entries";
            sqlite3_stmt *compiledStatement;
            if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement,NULL)==SQLITE_OK) {
                while (sqlite3_step(compiledStatement)==SQLITE_ROW) {
                    char *n=sqlite3_column_text(compiledStatement, 1);
                    char *e=sqlite3_column_text(compiledStatement, 2);
                    char *f=sqlite3_column_text(compiledStatement, 3);
                    NSString *name=[NSString stringWithUTF8String:n];
                    NSString *email=[NSString stringWithUTF8String:e];
                    NSString *food=[NSString stringWithUTF8String:f];
                    NSLog(@"Name= %@",name);
                    Data *data =[[Data alloc] initWithData:name theEmail:email TheFood:food];
                    [self.Peoples addObject:data];
                }
            }
            sqlite3_finalize(compiledStatement);
        }
        sqlite3_close(database);
    }

然后在TableViewController.m中,我使用'数据'来显示检索到的数据。对象

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *cellIdentifier = @"Cell";
    SiteCell *cell=(SiteCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell=nil) {
        cell=[[SiteCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier ];
    }
    NSInteger row=indexPath.row;
    Data *d=[mainDelegate.Peoples objectAtIndex:row];
    cell.primaryLabal.text=d.name;
    cell.secondaryLabal.text=d.email;
    cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
    return cell;

}

如何在数据库的表视图中显示数据?我没有在tableview上显示数据原因可能是数据库连接没有建立?。我如何更正它并获得所需的输出?你可以从这个链接下载示例代码https://drive.google.com/file/d/0B5pNDpbvZ8SnQkFySHkwZm9nR1k/view?usp=sharing

2 个答案:

答案 0 :(得分:0)

看起来您正在正确收集数据,但忘了更新表格。使用[self.yourTableView reloadData];

此行

if ($('.group1').length == $('.group1:checked').length) {
  // all are checked...
  $(':input[type="submit"]').prop('disabled', false);
} else {
  $(':input[type="submit"]').prop('disabled', true);
}

答案 1 :(得分:-1)

将此存储库用于简单的小型库

https://github.com/prashantbelani/DBOperation

您只需要在DBOperation.m文件中更改数据库名称。

E /克。的databaseName = @ “Emoji_app.rdb”;

和在DBFunction文件中,您可以使用 selectData 编写获取数据的方法,并使用 executeSQL 执行查询 希望这会对你有所帮助。