2
votes

Déposez la table et recréez-la si elle existe dans sqflite flutter

Je souhaite supprimer la table avant de la remplir avec les données du serveur, le cas échéant.

les requêtes que j'essaye

void _insertOption(OptionsGroupList option) async {

    int idd =  dbHelper.dropTable();

    print('DROP TABLE: $idd');

    PreferencesConnector myprefs= PreferencesConnector();
    String merchantid=await myprefs.readString('merchantid');
    String hashkey=await myprefs.readString('hashkey');

    Map<String, dynamic> row = {
      DatabaseHelper.columnGroupId:option.grouprowid ,
      DatabaseHelper.columnGroupName: option.groupname,
      DatabaseHelper.columnIsRequired:option.isrequired ,
      DatabaseHelper.columnMerchantId: merchantid,
      DatabaseHelper.columnMerchantHashKey: hashkey,
    };
    int id = await dbHelper.insertOption(row);

    print('inserted option row id: $id');
  }

J'ai essayé quelque chose comme ça mais rien ne se passe.

 deleteOptionTable() async {
    final db = await database;
    db.rawDelete("Delete * from option");
  }
  dropTable() async {
    final db = await database;
    db.query('SELECT * FROM cloudnet360.db WHERE name =option and type=table');
  }


3 commentaires

Je ne comprends pas le flutter mais ... l'instruction select dans dropTable () supprimera la table ??


@AIMINPAN Je n'arrive pas à supprimer la table.


avez-vous essayé int idd = await dbHelper.dropTable(); ? Je suppose que c'est asynchrone


3 Réponses :


3
votes

En effet, votre méthode dropTable ne semble pas supprimer de table:

Pour supprimer (supprimer) une table:

DELETE FROM my_table

Pour effacer le contenu d'un tableau:

DROP TABLE IF EXISTS my_table


0 commentaires

4
votes

Comme demandé dans la question, nous avons besoin d'une méthode pour supprimer une table si elle existe et la recréer en flutter et en utilisant le package sqflite ...

Future<void> DropTableIfExistsThenReCreate() async {

    //here we get the Database object by calling the openDatabase method 
    //which receives the path and onCreate function and all the good stuff
    Database db = await openDatabase(path,onCreate: ...);

    //here we execute a query to drop the table if exists which is called "tableName"
    //and could be given as method's input parameter too
    await db.execute("DROP TABLE IF EXISTS tableName");

    //and finally here we recreate our beloved "tableName" again which needs
    //some columns initialization
    await db.execute("CREATE TABLE tableName (id INTEGER, name TEXT)");

}


1 commentaires

Bien que ce code puisse résoudre la question, inclure une explication sur comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre publication et entraînerait probablement plus de votes à la hausse. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement à la personne qui la pose maintenant. Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limites et des hypothèses applicables. De l'avis



1
votes

C'est peut-être trop tard, mais si cela aide quelqu'un. Pour supprimer toutes les lignes de la table, utilisez

final db = await database;
db.delete("tableName");

Étrange, mais si vous attendez le résultat de la méthode de suppression, cela ne fonctionne pas.


0 commentaires