#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");
Странно, но если вы ожидаете результата метода удаления, он не работает.