sqflite再次创建删除的表时没有此类表错误

问题描述

我正试图在Flutter中创建一个本地数据库,而我正在使用sqflite库来解决这个问题。我的数据库表需要删除几次,但问题是每当删除表时便无法再次创建它,并且不返回任何此类表错误

这是错误说明:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: DatabaseException(Error Domain=FMDatabase Code=1 "no such table: foods" UserInfo={NSLocalizedDescription=no such table: foods}) sql 'INSERT INTO foods (id,food_name,food_code,Name_of_home_units,Index_of_home_units) VALUES (?,?,?)' args [1138,"Asian Salad",9780102,["gram"," spoon"],["0","1"]]}
#0      wrapDatabaseException 
package:sqflite/src/exception_impl.dart:11
<asynchronous suspension>
#1      SqfliteDatabaseFactoryImpl.wrapDatabaseException 
package:sqflite/src/factory_impl.dart:78
#2      SqfliteDatabaseMixin.safeInvokeMethod 
package:sqflite_common/src/database_mixin.dart:208
#3      SqfliteDatabaseMixin.txnRawInsert.<anonymous closure> 
package:sqflite_common/src/database_mixin.dart:383
#4      SqfliteDatabaseMixin.txnSynchronized.<anonymous closure> 
package:sqflite_common/src/database_mixin.dart:327
#5      BasicLock.synchronized (package:synchronized/src/basic_lock.dart:3<…>

这是我的数据库提供程序类:

class DatabaseProvider {
  Database _database;

  String TABLE_NAME = "foods";

  String COLUMN_ID = "id";
  String FOOD_NAME = "food_name";
  String FOOD_CODE = "food_code";
  String FOOD_UNITES = "Name_of_home_units";
  String FOOD_UNITES_INDEX = "Index_of_home_units";

  Future<Database> get database async {

    _database = await openDatabase(
      join(await getDatabasesPath(),'doggie_database.db'),onCreate: (generatedDatabase,version){
        return generatedDatabase.execute("CREATE TABLE $TABLE_NAME"+
          "($COLUMN_ID INTEGER PRIMARY KEY," +
          "$FOOD_NAME TEXT," +
          "$FOOD_CODE TEXT," +
          "$FOOD_UNITES TEXT," +
          "$FOOD_UNITES_INDEX TEXT" +
          ")");
      },version: 1
    );
    return _database;
  }

  Future<Database> createDatabase() async {
    String dbPath = await getDatabasesPath();

      return openDatabase(
      join(await getDatabasesPath(),'foodsDb.db'),version: 1
    );


  }


  Future<FoodItem> insertFood(FoodItem item) async {
    final db = await database;
    item.id = await db.insert("$TABLE_NAME",item.toMap());
    return item;
  }

  Future<List<Map<String,dynamic>>> getFoods() async {

    final db = await database;

    var foods = await db.query("$TABLE_NAME",columns: [
      COLUMN_ID,FOOD_NAME,FOOD_CODE,FOOD_UNITES,FOOD_UNITES_INDEX,]);

    return foods;
  }

  Future<int> delete(int id) async {
    final db = await database;

    return await db.delete(
      "$TABLE_NAME",where: "id = ?",whereArgs: [id],);
  }

  Future<void> deleteWholeDatabase() async {

    final db = await database;

    db.execute("DROP TABLE IF EXISTS $TABLE_NAME");

  }

  Future<int> update(FoodItem foodItem) async {
    final db = await database;

    return await db.update(
      "$TABLE_NAME",foodItem.toMap(),whereArgs: [foodItem.id],);
  }
}

如果您能帮助我解决这个问题,我将非常高兴。 :)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)