Comment puis-je insérer des données dans un DB sqlite dans iphone sdk (xcode)? merci!Comment insérer dans la table (sqlite db) dans iphone sdk
2
A
Répondre
3
Vous devez d'abord initialiser le db avec ces 2 méthodes
-(id) initDatabase{
databaseName = @"db.sqlite";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
[databasePath retain];
return self;
}
-(void) checkAndCreateDatabase{
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:databasePath];
if(success) return;
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
[fileManager release];
}
Ensuite, vous pouvez interagir avec lui:
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
static sqlite3_stmt *compiledStatement;
sqlite3_exec(database, [[NSString stringWithFormat:@"insert into myTable (var1, var2) values ('%@', '%@')", myVar1, myVar2] UTF8String], NULL, NULL, NULL);
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
0
facile à stocker des données dans DB
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath =[documentsDir stringByAppendingPathComponent:@"register.sqlite"];
BOOL success = [fileManager fileExistsAtPath:dbPath];
sqlite3_stmt *selectstmt;
if(!success)
{
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"register.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if (!success)
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
//*************** insert value in database******************************\\
const char *sql = "insert into reg_FORM (firstname,lastname,email,company,phone) VALUES ('nannav','cs','[email protected]','ibm',123456789)";
sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);
if(sqlite3_step(selectstmt)==SQLITE_DONE)
{
NSLog(@"insert successfully");
}
else
{
NSLog(@"insert not successfully");
}
sqlite3_finalize(selectstmt);
sqlite3_close(database);
}
}
THANK VOUS POUR LA RÉPONSE TEMPESTIVE !! mais si j'implémente fisrt et les deuxièmes méthodes, je vois 2 erreurs: "databaseName undeclared" et "databasepath undeclared" –
NSString * databaseName; NSString * databasePath; base de données sqlite3 *; char * sqlStatement; sqlite3_stmt * compiledStatement; ... et ça devrait marcher! – vincent
désolé mais je suis un vrai débutant ... où dois-je déclarer ces variables? –