Удалить таблицу и воссоздать заново, если она существует в sqflite flutter

#android #dart #flutter #sqflite

#Android #dart #flutter #sqflite

Вопрос:

Я хочу удалить таблицу перед заполнением данными сервера, если она существует.

запросы, которые я пытаюсь

  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');
  }
  

Я пробовал что-то подобное, но ничего не происходит.

 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');
  }
  

Комментарии:

1. Не понимаю flutter, но … оператор select в dropTable() удалит таблицу??

2. @AIMINPAN Я не могу удалить таблицу.

3. вы пробовали int idd = await dbHelper.dropTable(); ? Я предполагаю, что это асинхронно

Ответ №1:

Действительно, ваш метод dropTable, похоже, на самом деле не удаляет ни одной таблицы:

Чтобы удалить (отбросить) таблицу:

 DROP TABLE IF EXISTS my_table
  

Чтобы очистить содержимое таблицы:

 DELETE FROM my_table
  

Ответ №2:

Как задается в вопросе, нам нужен метод для удаления таблицы, если она существует, и воссоздания ее во flutter и с помощью пакета 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)");

}
  

Ответ №3:

Может быть, уже слишком поздно, но если это кому-то поможет. Чтобы удалить все строки из таблицы, используйте

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

Странно, но если вы ожидаете результата метода удаления, он не работает.