首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改颤振中现有数据库后的OpenDatabase错误

问修改颤振中现有数据库后的OpenDatabase错误
EN

Stack Overflow用户
提问于 2021-02-15 19:06:39
回答 2查看 331关注 0票数 0

当我试图修改我现有的SQLITE数据库时,我得到了一个openDatabase错误。

我修改了一个现有的表并创建了一个新的表。

但是,该错误在执行我的onUpgrade回调之前会出现。

执行openDatabase时出现错误

错误:

SqfliteDatabaseException (DatabaseException(无法执行此操作,因为没有当前事务)。sql 'COMMIT‘args []})

代码语言:javascript
复制
  static Future<Database> initDatabase([int dbVersion]) async {
    return await openDatabase(join(await getDatabasesPath(), _dbName),
        version: 2, onUpgrade: _onUpgrade, onCreate: _onCreate);
  }

当我将openDatabase的参数"version“更改为1时,SQL错误不再出现。但是我不能进入onUpgrade回调。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-16 14:31:04

新创建数据库时,使用数据库版本调用onCreate (此处2)。

数据库版本保存到数据库中,下一次打开数据库并存在时,将检查版本。如果数据库的版本是>=,则构造函数中给出的版本不调用onUpgrade (也不调用onCreate,因为数据库已经存在,无论哪个版本)。

如果在创建版本后将其设置为1,则不会调用onUpgrade,因为您的版本已经是2。

标准程序如下:

从数据库版本1开始,基本的创建脚本(以及预填充数据的脚本)在onCreate中执行。

每次必须更改数据库时(新表、新值、修改表等)将数据库版本增加1,并在onUpgrade上实现给定版本的更改脚本。

这里有一个关于如何调用这些方法的示例,假设该应用程序是在给定的版本2中发布的:

App是第一次安装和启动,数据库不存在: onCreate与版本2一起调用,您必须执行从初始到版本2的所有创建和更新脚本。

现在将数据库版本设置为3,下次应用程序启动时:调用旧版本2和新版本3的onUpgrade时,必须执行版本3的更新脚本。

我将创建每个版本要运行的脚本列表,并在onCreate (从1到给定版本)和onUpgrade (从oldVersion+1到newVersion )中迭代它。

票数 0
EN

Stack Overflow用户

发布于 2021-02-16 12:49:12

无论何时修改数据库表,都必须卸载应用程序,然后运行项目,因为当您第一次执行应用程序时,已经在本地db中创建了表,而当您修改代码时,它将您的查询与您首次创建的表匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66213959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档