Je suis un développeur iPhone débutant qui essaie de prendre des informations sur une base de données sqlite dans Xcode 4.3. J'ai ma base de données (qui s'appelle DB_Info.sqlite) dans le même répertoire que mes fichiers .h et .m, et j'ai également fait glisser la base de données dans la section des dossiers sur la barre de gauche dans Xcode. Pourriez-vous jeter un coup d'œil à mon code et me dire où est mon erreur? J'ai utilisé NSLogs pour identifier où le problème se produit, à la toute dernière instruction if, et il est écrit dans les commentaires. Merci d'avance!SQLite ne prépare pas de requête lors de l'accès à la base de données dans Xcode
#import <sqlite3.h>
@implementation Player
{
sqlite3 *DB_Info;
NSString *databasePath;
NSString *docsDir;
NSArray *dirPaths;
}
-(Player*)createPlayer:(NSString*)playerName
{
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"DB_Info.sqlite"]];
const char *dbpath = [databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &DB_Info) == SQLITE_OK) { //works fine
NSString *querySQL = [NSString stringWithFormat: @"SELECT * FROM playerlist WHERE fullName=\"%@\"", playerName];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(DB_Info, query_stmt, -1, &statement, NULL) == SQLITE_OK) { //PROBLEM: This is where the problem is, and the if statement never goes through
//....rest of code here
} else {
NSLog(@"Error");
}
}
NSLog (@"% @ ", querySQL), et vérifiez soigneusement que querySQL est la bonne requête –
Vous êtes Si vous n'en avez pas, sqlite3_open créera une base de données vide pour vous. Vous devez probablement (a) vouloir copier la base de données de bundle vers des documents (en supposant que vous l'ayez inclus dans votre bundle).) et (b) utilisez sqlite3_open_v2 au lieu de sqlite_open – Rob