我试图独自学习颤振,所以我决定制作一个应用程序。 我承认我在正确建立数据库方面遇到困难,因此我已经从开源应用程序复制了数据库代码。
基本上,复制的应用会创建具有标题,描述日期和ID的注释对象。 现在我想要的是向对象(dateexamen)(字符串)添加另一个属性
我所拥有的: 我有一个main.dart,一个database.dart,一个note.dart内的model文件夹,一个带有listView的页面内的Screen文件夹以及一个用于修改/添加/删除对象的浮动按钮。
我的对象有:
当我单击浮动按钮时,将创建一个对象,然后打开表单页面并更新刚刚创建的对象。
那我做了什么?:
我刚刚进入了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。
祝你有美好的一天,法提赫
答案 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)
,然后根据需要调整创建表。 (更改版本或清除应用数据。)重试。...