2009-09-08 7 views
0

Je reçois une erreur "sqlite3_exce lecture seule base de données" lors de l'insertion ou la mise à jour des données dans la table.Erreur lors de l'insertion ou de la mise à jour des données dans la table "sqlite3_exce lecture seule base de données" erreur

Parce que d'abord je dois créer plusieurs tables dans la base de données & insérer beaucoup de données en elle, donc je crée une demande fictive qui crée la base de données « de database.sql », créer le tableau & il insérer des données dans les tableaux.

Maintenant, je mets le fichier "database.sql" dans le dossier des ressources de mon application principale & donne le chemin du paquet principal lors de l'accès aux données de la base de données.

Je suis en mesure d'accéder aux données de celui-ci, mais tout en insérant ou mettre à jour les données de la table, je reçois ci-dessus mention d'erreur.

veuillez m'aider à résoudre le problème ci-dessus.

Merci.

Répondre

4

Oui, les fichiers du bundle maib sont en lecture seule.

Vous pouvez écrire SEULEMENT dans le dossier Documents.

Copiez votre fichier de base de données dans des documents et travailler avec elle

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; // path to Documents folder 
0

sqlite3 statique * getDbHandle() {

NSFileManager *fileManager = [NSFileManager defaultManager]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0];  // path to Documents folder 
NSString * databaseFileName = [documentsDirectory stringByAppendingString:@"/feeds.db"]; 

// check if db file is in documents folder 
// If it is already there, thats great. 
// Else, we need to copy it there. 

BOOL dbExists = [fileManager fileExistsAtPath:databaseFileName]; 

if (!dbExists) { 
    NSLog(@"No database in document folder.Need to move it there"); 

    // we need to copy the file here... 
    NSString * databaseFileinAppDir = [ [NSBundle mainBundle] pathForResource:@"feeds" ofType:@"db"]; 

    NSError *error; 

    NSLog(@"Target Db %@",databaseFileName); 

    [fileManager copyItemAtPath:databaseFileinAppDir toPath:databaseFileName error:&error]; 

    if (error){ 
     NSLog(@"ERROR IN FILE MOVE:{%@}",[error description]); 
     return NULL; 
    } 
} 

sqlite3 *database = NULL; 

if (sqlite3_open([databaseFileName UTF8String], &database) != SQLITE_OK) { 
    printf("ERROR: Unable to open database %@",databaseFileName); 
    return NULL; 
} 

return database; 

}

Questions connexes