使用sqflite时出现Flutter错误,表格中没有此类列

时间:2019-07-13 12:53:48

标签: flutter dart sqflite

我试图独自学习颤振,所以我决定制作一个应用程序。 我承认我在正确建立数据库方面遇到困难,因此我已经从开源应用程序复制了数据库代码。

基本上,复制的应用会创建具有标题,描述日期和ID的注释对象。 现在我想要的是向对象(dateexamen)(字符串)添加另一个属性

我所拥有的: 我有一个main.dart,一个database.dart,一个note.dart内的model文件夹,一个带有listView的页面内的Screen文件夹以及一个用于修改/添加/删除对象的浮动按钮。

我的对象有:

  • 名称
  • 说明
  • 创建日期
  • 优先
  • Dateexamen(我做了一切来补充这一点)

当我单击浮动按钮时,将创建一个对象,然后打开表单页面并更新刚刚创建的对象。

那我做了什么?:

我刚刚进入了note.dart,在所有地方都添加了属性dateexamen,就像里面的所有东西一样,并对所有文件执行了此操作。

我没有崩溃,但是现在它不想创建任何对象,当删除对所有文件的修改后,它可以再次工作。

控制台中有错误:

  

E / SQLiteLog(4684):(1)表note_table没有名为   大黄素E / flutter(4684):   [错误:flutter / lib / ui / ui_dart_state.cc(148)]未处理的异常:   DatabaseException(表note_table没有名为dateexamen的列   (代码1 SQLITE_ERROR):,而在编译时:INSERT INTO note_table   (标题,说明,优先级,日期,日期)值(?,?,?,?,   ?))sql'INSERT INTO note_table(标题,说明,优先级,日期,   dateexamen)VALUES(?,?,?,?,?)'args [a,b,2,Jul 13,2019,   2019年7月14日,星期日,下午12:00]]

有指向应用库的链接:https://github.com/fakman99/flutter_first/

在此先感谢您的帮助,我对flutter感到非常兴奋,我需要了解数据库和后端如何处理flutter。

祝你有美好的一天,法提赫

2 个答案:

答案 0 :(得分:0)

尝试您的应用程序的任何人都可能不会收到您得到的错误。我的猜测是您在添加新列之前运行了该应用程序一次,因此该列确实不存在。在sqlite中,一旦定义了表,除非您删除/重新创建它们,否则必须手动添加列。

对此的一种解决方法是在onUpgrade回调期间更改版本号并修改(或简单地删除/创建表)。我们可以称其为架构迁移过程。这里有一个示例:https://github.com/tekartik/sqflite/blob/master/sqflite/doc/migration_example.md

您身边的一项快速测试是简单地卸载您的应用程序,或在再次尝试编码之前删除应用程序数据=>魔术,它有效!

答案 1 :(得分:0)

似乎您只是调整对象,而不调整数据库本身。

搜索openDatabase

openDatabase(join(await getDatabasesPath(), 'cache.db'),
    onCreate: (db, version) {
  return db.execute(
      'CREATE TABLE cache(timestamp INTEGER, query TEXT PRIMARY KEY, data TEXT)');
}, version: 1)

,然后根据需要调整创建表。 (更改版本或清除应用数据。)重试。...