2011-05-10 7 views
0

C'est la première fois que j'utilise SQL, et je pensais avoir tout fait correctement, mais je reçois toujours l'erreur que ma table n'existe pas. Pour créer la table, je l'ai fait:Erreur lors de l'écriture dans la base de données SQLite

CREATE TABLE "Users" ("UserID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "UserName" VARCHAR, "Password" VARCHAR) 

J'ai une table utilisateur nommé

Pour écrire à la table, je vous appelle ceci:

- (void) addUser { 

if(addStmt == nil) { 
    const char *sql = "insert into Users(UserName, Password) values (?, ?)"; 
    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK) 
     NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 
} 

sqlite3_bind_text(addStmt, 1, [userName UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(addStmt, 2, [password UTF8String], -1, SQLITE_TRANSIENT); 

if(SQLITE_DONE != sqlite3_step(addStmt)) 
    NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 
else 
    //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid 
    userID = sqlite3_last_insert_rowid(database); 

//Reset the add statement. 
sqlite3_reset(addStmt); 
} 

Quand je déclenche cela, il ferme l'application et me donne l'erreur Error while creating add statement. 'no such table: Users'

Il m'a fallu des jours pour aller aussi loin, et je n'ai aucune idée d'où le prendre à partir d'ici. Que puis-je faire pour résoudre ce problème?

Edit: Voici comment j'importer mon DB dans mon fichier AppDelegate

- (NSString *) getDBPath { 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 
return [documentsDir stringByAppendingPathComponent:@"UserDatabase.sqlite"]; 
} 

Répondre

1

Je suis sûr que vous obtenez cette erreur, car SQLite n'a pas pu trouver votre sqlite fichier, il crée une base de données vide à la place. Et dans une base de données vide, il ne trouverait évidemment pas votre table, d'où l'erreur.

Donc atteindre le fichier de base de données correctement devrait être votre objectif. A partir de votre code, il semble que vous l'ayez lu dans le répertoire des documents - mais votre fichier db ne pourrait pas s'y retrouver si vous ne le copiez pas dans ce répertoire.

Essayez d'ajouter le fichier sqlite réel à votre ensemble. Ensuite, utilisez ce code pour atteindre le chemin de votre fichier sqlite:

databasePath = [[NSBundle mainBundle] pathForResource:@"UserDatabase" ofType:@"sqlite"]; 

Et je crois que cela résoudrait votre problème. Cependant, vous devriez noter que si vous voulez enregistrer les modifications apportées à cette base de données, et je pense que vous le souhaitez, vous ne copieriez pas le fichier dans le répertoire documents, car les fichiers groupés sont en lecture seule. Dans ce cas, vous devez rechercher le fichier sqlite dans le chemin du répertoire, et s'il n'est pas trouvé (probablement la première utilisation de l'application), copiez-le dans ce répertoire à partir de l'ensemble.

+0

Cela semble fonctionner. J'ai eu ce problème plusieurs fois lors de l'ouverture d'autres fichiers. Si je mets le fichier SQL sur un serveur, est-ce que je le ferais de la même manière? Ou devrais-je impliquer FTP? – Chris

Questions connexes