Comment insérer des données dans une base de données SQLite dans l'iPhone

Je suis nouveau sur le développement iPhone. Je veux insérer certaines données dans ma base de données et de les récupérer
et l'afficher dans un tableau. J'ai créé Database data.sqlite avec table 'utilisateur'. La table dispose de deux valeurs, id(varchar) et nom(varchar). J'ai inséré 3 lignes de données dans la table via "insert into user('1','xxxx');" dans la fenêtre du terminal. J'ai créé une navigation en fonction de l'application nommée "testDb". Dans AppDelegate j'ai deux méthodes

- (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]);
    }
}

et

+(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;
}

Dans rootviewcontroller

-(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";
}

Pour afficher le contenu

- (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;
}

Cela fonctionne bien pour afficher le contenu du tableau. Mais maintenant, je veux insérer une ligne dans ma table et afficher le contenu inséré avec un contenu précédent. Depuis, je suis nouveau sur iPhone, j'ai appris à partir des tutoriels pour lire la base de données et afficher son contenu. Comment puis-je aller plus loin dans ma tâche de l'insertion et de l'afficher à nouveau?

Utiliser un wrapper pour traiter avec SQLite au lieu d'utiliser l'API C directement. Il rend la vie si beaucoup plus facile.... cocoaheads.byu.edu/resources/sqlite
Ici est agréable tutoriel disponible. cliquez ICI pour le lien.

OriginalL'auteur Warrior | 2010-02-02