web-dev-qa-db-fra.com

Comment créer plusieurs tables dans une base de données dans sqflite?

Im bâtiment et application avec flutter qui utilise la base de données SQLite. J'ai créé la première table en utilisant ce morceau de code:

 void _createDb(Database db, int newVersion) async {
    await db.execute('''CREATE TABLE cards (id_card INTEGER PRIMARY KEY, 
         color TEXT, type TEXT, rarity TEXT, name TEXT UNIQUE, goldCost INTEGER,
         manaCost INTEGER, armor INTEGER, attack INTEGER, health INTEGER, description TEXT)''');
}

La table est créée et je peux y accéder sans problème.

Malheureusement, je ne peux pas inclure plus d'une table que je viens de créer. J'ai essayé d'ajouter une autre clause SQL CREATE TABLE dans la même méthode et de répéter la méthode db.execute avec une clause SQL différente juste à la ligne suivante.

J'imite le code de ce tutoriel: https://www.youtube.com/watch?v=xke5_yGL0uk

Comment ajouter une autre table dans la même base de données?

9
filiard

dans openDatabase (chemin d'accès, onCreate, version), utilisez un paramètre facultatif supplémentaire "onUpgrade" et définissez la suppression puis la création de scripts de table. et également mettre à niveau (augmenter) la version des paramètres d'une unité.

----- Extrait de code ------

openDatabase(path, onCreate:_createDb, onUpgrade: onUpgrade,version:_DB_VERSION);
...
...

    _onUpgrade( Database db, int oldVersion, int newVersion ) async {

    Batch batch = db.batch();

    // drop first

    batch.execute("DROP TABLE IF EXISTS $_TABLE_3 ;");

    batch.execute("DROP TABLE IF EXISTS $_TABLE_2 ;");
    batch.execute("DROP TABLE IF EXISTS $_TABLE_1 ;");
    // then create again
    batch.execute("CREATE TABLE $TABLE_1 ...... ");
    batch.execute("CREATE TABLE $TABLE_2 ...... ");
    batch.execute("CREATE TABLE $TABLE_3 ...... ");
    List<dynamic> result = await batch.commit();

}

Remarque: Chaque fois que vous créerez ou modifierez la structure de certaines tables, vous devrez augmenter la version de la base de données dans la méthode openDatabase (). afin que la mise à niveau soit appelée, sinon elle ne sera pas appelée.

0
Ajay Kotiyal