XCode, le SQLite, tout ça.

Publié le 22 décembre 2014 par Janvianoce

Hello,

Ca faisait un bail.

Bon, si j’écris cette petite note, c’est plus à titre de pense-bête, et histoire d’agglomérer différentes choses vues ces derniers jours.

Pour résumer, je me suis mis à l’Objective-C en autodidacte il y a un peu plus de deux ans maintenant. J’y connaissais rien, mais alors rien du tout, et aujourd’hui… Et ben c’est pas encore ça, mais ça va un peu mieux.

J’ai tenté des petits programmes sans prétention, un générateur de rimshot, qui s’active quand on secoue le téléphone, j’ai élaboré un prototype de l’appli Battaklang (que je vous conseille) pour LaSauce SARL, un espèce de billard sans trous avec Cocos2D.

Concernant le dernier, il est plutôt rigolo, mais la physique 2D et le design, c’est pas vraiment mon dada.

Ah, j’ai fait un peu d’Android aussi, dans le but de faire de la thune en innondant le Store de jeux merdiques, mais je m’y suis très très très mal pris, et je suis juste banni (Insère ici ton LOL de bon aloi).

Donc, j’ai préféré repartir sur des choses basiques. Le CV MS Dos avait bien marché en son temps. Il alliait simplicité d’utilisation, fun et nostalgie.

Du coup, j’ai envie d’utiliser la puissance phénoménale des appareils Apple pour faire un jeu textuel, à l’ancienne, toi-même tu sais mah nigga.

J’utilise un projet standard dans XCode de type View-Based Application, avec une librairie en plus, celle qui va me permettre de gérer une base SQLite3 qui contient l’architecture de l’aventure.

Donc, si le principe d’interaction SQLite XCode vous intéresse, dans un premier temps, si vous ne voulez pas passer votre temps dans le terminal d’OSX pour créer votre base, utilisez DB Browser for SQLite. Il est simple, tout se fait en interface graphique, et fera hurler les puristes.

Je vous conseille tout de même un minimum de connaissances en SQL, hein, mais ça, vous le savez déjà.

Ajoutez la base créée dans XCode et pensez à ajouter la librairie suivante dans XCode pour pouvoir gérer et interroger cette base.

– libsqlite3.dylib

Enfin, ci-dessous un sample de comment j’appelle ma base :

– Déjà, déclarez une variable de type sqlite3 dans votre .h (ce n’est pas votre database en elle-même, mais ça servira plus tard) :

@property (nonatomic) sqlite3 *database;

Ensuite, ci-dessous une méthode qui peut servir à ouvrir sa base, faire sa query SQL et fermer la-dite base, tout en utilisant une variable de type NSString passée en paramètre histoire de personnaliser un peu la query.

RIEN DE FOLICHON MAIS LA SYNTAXE M’A UN PEU FAIT CHIER.

-QuerySQLiteDB:(NSString*) data{
    
    NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MABASE.sqlite3"];
    
    NSString *result;
    
    if (sqlite3_open([path UTF8String], &_database) == SQLITE_OK){
//Plouf en dessous, notre variable data passée en entrée de la méthode
        NSString *sqlString =[NSString stringWithFormat:@"SELECT * FROM TASKS WHERE COLUMN = '%@'", data ];
        const char *sql = [sqlString UTF8String];
        sqlite3_stmt *searchStatement;
        if(sqlite3_prepare_v2(_database, sql, -1, &searchStatement, NULL) == SQLITE_OK){
//En dessous, on itère dans les résultats renvoyés
            while (sqlite3_step(searchStatement) == SQLITE_ROW) { 
                
//En dessous, je stocke mon résultat dans une variable se rapportant à la troisième colonne de la ligne de résultat en cours.
                NSString *leftChoice = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchStatement, 2)];
                
                NSLog(result);            }
        }
        else
        {
            NSLog( @"Failed from sqlite3_prepare_v2. Error is:  %s", sqlite3_errmsg(_database) );
        }
        sqlite3_finalize(searchStatement);
        sqlite3_close(_database);
    }
}

En revanche, j’admets que je ne vérifie pas grand chose ici, donc gros gros risque de bugs, mais les esprits vifs et félins se seront déjà outrés à juste titre.