问题描述
我正试图在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 (将#修改为@)