如何在 iPhone 中将数据插入 SQLite 数据库 [英] How to insert data into a SQLite database in iPhone

查看:20
本文介绍了如何在 iPhone 中将数据插入 SQLite 数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 iPhone 开发的新手.我想将某些数据插入我的数据库并检索它并将其显示在表格中.我用表'user'创建了 Database data.sqlite.该表有两个值,id(varchar) 和 name(varchar).我通过insert into user value('1','xxxx');"在表中插入了 3 行数据在终端窗口中.我创建了一个名为testDb"的基于导航的应用程序.在 AppDelegate 我有两种方法

I am new to iPhone development. I want to insert certain data into my database and retrieve it and display it in a table. I have created Database data.sqlite with table 'user'. The table has two values, id(varchar) and name(varchar). I have inserted 3 rows of data in the table via "insert into user value('1','xxxx');" in the terminal window. I have created a navigation based applicaton named "testDb". In AppDelegate I have two methods

- (void)createEditableCopyOfDatabaseIfNeeded {
    NSLog(@"Creating editable copy of database");
    // First, test for existence.
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"data.sqlite"];
    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success) return;
    // The writable database does not exist, so copy the default to the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"data.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if (!success) {
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }
}

+(sqlite3 *) getNewDBConnection{
    sqlite3 *newDBconnection;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"data.sqlite"];
    // Open the database. The database was prepared outside the application.
    if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) {
        NSLog(@"Database Successfully Opened :)");
    }
    else {
        NSLog(@"Error in opening database :(");
    }
    return newDBconnection;
}

在根视图控制器中

-(void)initializeTableData{
    sqlite3 *db=[DatabaseTestAppDelegate getNewDBConnection];
    sqlite3_stmt *statement=nil;
    const char *sql="select * from user";
    if (sqlite3_prepare_v2(db, sql, -1, &statement, NULL)!=SQLITE_OK)
        NSAssert1(0,@"error in preparing staement",sqlite3_errmsg(db));
    else {
        while(sqlite3_step(statement)==SQLITE_ROW)
            [tableData addObject:[NSString stringWithFormat:@"%s",(char*)sqlite3_column_text(statement,1)]];
    }
    sqlite3_finalize(statement);
}

- (void)viewDidLoad {
    [super viewDidLoad];
    tableData=[[NSMutableArray alloc]init];
    [self addMyObjectIntoDatabase];
    [self initializeTableData];
    self.title=@"Database test";
}

显示内容

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    NSLog(@"before displaying data");
    cell.textLabel.text=[tableData objectAtIndex:indexPath.row];
    NSLog(@"after displaying data");
    // Configure the cell.
    return cell;
}

这可以很好地显示表格的内容.但现在我想在我的表中插入另一行并显示插入的内容以及以前的内容.由于我是 iPhone 新手,我从教程中学习了读取数据库并显示其内容.如何继续执行插入和再次显示的任务?

This is working fine to display the content of table. But now I want to insert another row into my table and display the inserted content along with previous content. Since I am new to iPhone I learnt from tutorials to read the database and display its contents. How do I proceed further to my task of inserting and displaying again?

推荐答案

如果你真的有兴趣学习如何使用 SQLite 来管理 iPhone 应用程序中的数据,我建议你完成以下教程,因为它是一个很好的介绍:

If you're really interested in learning how to use SQLite to manage data in an iPhone app, I would recommend you to complete the following tutorial, as it's a very good introduction:

iphone-programming-tutorial-creating-a-todo-list-using-sqlite-part-1

本教程使用 SQLite 在 iPhone 应用程序中处理选择、更新、插入和删除数据.

The tutorial handles Selecting, Updating, Inserting and Deleting data in an iPhone app, using SQLite.

这篇关于如何在 iPhone 中将数据插入 SQLite 数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆