Android 没有这样的表错误:sqlite(moor)表仅在清除颤振中的应用程序数据后创建

Android 没有这样的表错误:sqlite(moor)表仅在清除颤振中的应用程序数据后创建,android,database,sqlite,flutter,flutter-moor,Android,Database,Sqlite,Flutter,Flutter Moor,我正在为我的颤振应用程序创建一个数据库。它有5个表和相应的DAO(数据访问对象) @UseMoor( 表:[购物车、购物车总数、书籍、主题、图像], daos:[CartDao,carttottaldao,BooksDao,SubjectsDao,SearchDao,ImagesDao]) 类AppDatabase扩展了$AppDatabase{ AppDatabase() :super(flatterQueryExecutor.inDatabaseFolder)( 路径:“db.sqlite”

我正在为我的颤振应用程序创建一个数据库。它有5个表和相应的DAO(数据访问对象)

@UseMoor(
表:[购物车、购物车总数、书籍、主题、图像],
daos:[CartDao,carttottaldao,BooksDao,SubjectsDao,SearchDao,ImagesDao])
类AppDatabase扩展了$AppDatabase{
AppDatabase()
:super(flatterQueryExecutor.inDatabaseFolder)(
路径:“db.sqlite”,logStatements:true);
@凌驾
int get schemaVersion=>1;
}
当我在模拟器上运行应用程序时,一切正常。所有表都已正确创建。在实际设备上运行应用程序时会发生错误。如预期的那样,创建了3个表并填充了来自云的数据。cart和total的其他两个表未创建,访问cart页面时抛出无此类表的错误

I/flutter ( 5321): Moor: Sent SELECT * FROM cart WHERE name != ? with args [Total]
E/SQLiteLog( 5321): (1) no such table: cart
此外,不会显示在应用程序启动时运行的my database update服务的日志记录。 一旦我从设备上的应用程序信息部分清除应用程序数据并再次启动应用程序,一切都会恢复正常。

I/flutter ( 5717): Moor: Sent CREATE TABLE IF NOT EXISTS books (amazon_link VARCHAR NULL, author VARCHAR NOT NULL, cost INTEGER NOT NULL, cover_url VARCHAR NULL, description VARCHAR NULL, discounted_cost INTEGER NULL, flipkart_link VARCHAR NULL, isbn INTEGER NOT NULL, language VARCHAR NULL, name VARCHAR NOT NULL, pages INTEGER NULL, publication_number INTEGER NOT NULL, publication_status VARCHAR NOT NULL, youtube_link VARCHAR NULL, PRIMARY KEY (publication_number)); with args []
I/flutter ( 5717): Moor: Sent CREATE TABLE IF NOT EXISTS subjects (publication_number INTEGER NOT NULL, sub_name VARCHAR NOT NULL, PRIMARY KEY (publication_number, sub_name)); with args []
I/flutter ( 5717): Moor: Sent CREATE TABLE IF NOT EXISTS images (url VARCHAR NOT NULL, publication_number INTEGER NOT NULL); with args []
I/flutter ( 5717): Moor: Sent CREATE TABLE IF NOT EXISTS cart (name VARCHAR NOT NULL, quantity INTEGER NOT NULL, cost INTEGER NOT NULL, discounted_cost INTEGER NOT NULL, PRIMARY KEY (name)); with args []
I/flutter ( 5717): Moor: Sent CREATE TABLE IF NOT EXISTS cart_total (name VARCHAR NOT NULL, quantity INTEGER NOT NULL, cost INTEGER NOT NULL, discounted_cost INTEGER NOT NULL, PRIMARY KEY (name)); with args []
按预期打开购物车页面

I/flutter ( 5717): Moor: Sent SELECT * FROM cart WHERE name != ? with args [Total]
I/flutter ( 5717): Moor: Sent SELECT * FROM cart_total WHERE name = ?; with args [Total]
我是不是遗漏了什么?我还搜索了创建表是否有任何限制,但没有找到任何限制。由于moor的工作原理是使用build_runner生成代码,因此我还尝试清除旧的构建并再次重建


由于该应用程序在清除数据后在模拟器和设备上运行良好,因此我假设我的代码是正确的。有什么问题吗?

所以问题不在于moor或我的代码。由于该应用程序尚未发布,我仍在对数据库进行更改,所以我不想更改模式版本并提供迁移策略

我的理解是,数据库将在应用程序卸载时被删除,对数据库所做的任何更改都将成为下次安装应用程序时的新模式。事实并非如此。至少不总是这样

结果是谷歌硬盘在一些设备上备份了你的应用程序的数据库文件,并在重新安装应用程序时将其还原。这就是导致我的应用程序出现奇怪行为的原因

这里有一个链接到,以获取详细解释