设置 sqflite 数据库时缺少列 table
Missing column when setting up sqflite database table
我目前正在使用 flutter 框架开发 android 应用程序。
为了设置数据库,我使用了 sqflite 插件。
设置数据库的过程如下:
Future<Database> getDbModelDevice() async {
return openDatabase(join(await getDatabasesPath(), dbNameDevice),
onCreate: (db, version) {
return db.execute("""
CREATE TABLE $tableNameDevice (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
ip TEXT NOT NULL
)""");
},
version: 1,
);
}
这按预期工作并使用 table 创建了数据库。
我对这个话题很陌生,所以我不知道你是否能以某种方式看到创建的结构 table。我尝试通过在其中插入一个设备来测试新的 table:
Future<void> insertDevice(Device device) async {
db.insert(
tableNameDevice,
device.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'ip': ip,
};
}
调用函数 insertDevice 时,出现以下错误消息:
[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: DatabaseException(table deviceTable has no column named ip (code 1): , while compiling: INSERT OR REPLACE INTO deviceTable (id, name, ip) VALUES (?, ?, ?)) sql 'INSERT OR REPLACE INTO deviceTable (id, name, ip) VALUES (?, ?, ?)' args [0, testInsertion, 0.0.0.0]}
其他列似乎有效,因为在注释掉 [=][=] 中的参数 ip 时插入有效26=]toMap()函数插入设备没有错误。
我在这里错过了什么?非常感谢任何帮助。
@TimBiegeleisen 的评论帮我解决了问题。
我正在查看我定义的删除表的函数,发现我删除了错误的表。
自从我修复后,它现在可以正常工作了。
感谢您的回答!
我目前正在使用 flutter 框架开发 android 应用程序。 为了设置数据库,我使用了 sqflite 插件。
设置数据库的过程如下:
Future<Database> getDbModelDevice() async {
return openDatabase(join(await getDatabasesPath(), dbNameDevice),
onCreate: (db, version) {
return db.execute("""
CREATE TABLE $tableNameDevice (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
ip TEXT NOT NULL
)""");
},
version: 1,
);
}
这按预期工作并使用 table 创建了数据库。 我对这个话题很陌生,所以我不知道你是否能以某种方式看到创建的结构 table。我尝试通过在其中插入一个设备来测试新的 table:
Future<void> insertDevice(Device device) async {
db.insert(
tableNameDevice,
device.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'ip': ip,
};
}
调用函数 insertDevice 时,出现以下错误消息:
[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: DatabaseException(table deviceTable has no column named ip (code 1): , while compiling: INSERT OR REPLACE INTO deviceTable (id, name, ip) VALUES (?, ?, ?)) sql 'INSERT OR REPLACE INTO deviceTable (id, name, ip) VALUES (?, ?, ?)' args [0, testInsertion, 0.0.0.0]}
其他列似乎有效,因为在注释掉 [=][=] 中的参数 ip 时插入有效26=]toMap()函数插入设备没有错误。
我在这里错过了什么?非常感谢任何帮助。
@TimBiegeleisen 的评论帮我解决了问题。 我正在查看我定义的删除表的函数,发现我删除了错误的表。
自从我修复后,它现在可以正常工作了。
感谢您的回答!