2

我正在尝试自己学习颤振,所以我决定制作一个应用程序。我承认我很难正确创建数据库,所以我从开源应用程序中复制了数据库的代码。

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

我有:我有一个 main.dart、一个 database.dart、一个 note.dart 中的模型文件夹、一个带有 listView 的页面中的 Screen 文件夹和一个用于修改/添加/删除对象的另一个页面的浮动按钮。

我的对象有:

  • 姓名
  • 描述
  • 创建日期
  • 优先
  • Dateexamen(我做了一切来添加这个)

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

那我做了什么?:

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

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

控制台中有错误:

E/SQLiteLog(4684):(1)表note_table没有名为dateexamen的列E/flutter(4684):[错误:flutter/lib/ui/ui_dart_state.cc(148)]未处理的异常:DatabaseException(表note_table没有列命名 dateexamen (code 1 SQLITE_ERROR): ,编译时: INSERT INTO note_table (title, description, priority, date, dateexamen) VALUES (?, ?, ?, ?, ?)) sql 'INSERT INTO note_table (title, description, priority , date, dateexamen) VALUES (?, ?, ?, ?, ?)' args [a, b, 2, Jul 13, 2019, Sunday, July 14, 12:00PM]}

有应用程序仓库的链接:https ://github.com/fakman99/flutter_first/

提前感谢您的帮助,我对 Flutter 感到非常兴奋,我需要了解数据库和后端如何与 Flutter 一起工作。

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

4

2 回答 2

3

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

解决方案是在onUpgrade回调期间增加版本号并修改(或简单地删除/创建表)。我们可以称其为模式迁移过程。这里有一个例子:https ://github.com/tekartik/sqflite/blob/master/sqflite/doc/migration_example.md 。

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

于 2019-07-14T10:50:15.970 回答
0

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

搜索开放数据库

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)

并根据您的需要调整创建表。(更改版本或擦除应用程序数据。)重试....

于 2019-08-26T13:01:03.570 回答