实体
Settings
:
@Entity()
class Settings {
@PrimaryKey(autoGenerate: true)
int? id;
String key;
String? value;
Settings(this.id, this.key, this.value);
}
DAO
Settings
:
@dao
abstract class SettingsDao {
@Query('SELECT * FROM Settings')
Future<List<Settings>> findAll();
@Query("SELECT * FROM Settings WHERE key = 'update_date_time'")
Future<Settings?> findByKey();
}
代码:
SettingsDao settingsDao=sl.get<SettingsDao>();
Settings? updateDataTime = await settingsDao.findByKey();
updateDataTime == null
,但是final allSettings = await settingsDao.findAll();
。 allSettings
包含我所有的 Settings
实体。为什么 updateDataTime
为空?
在
allSettings
列表中,我有我的 Settings
(6),其中之一在关键字段中有 update_date_time
。我在 DAO 中添加了另一种方法来检索列表而不是一个实体:
@Query("SELECT * FROM Settings WHERE key = 'update_date_time'")
Future<List<Settings>> findByKey2();
错误:
E/flutter (23265): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Unsupported query "SELECT * FROM Settings WHERE key = 'update_date_time'" for List return type. It should be SELECT, since DELETE, UPDATE, INSERT returns `int` type.
E/flutter (23265): #0 QueryAdapter.queryList (package:floor_common/src/adapter/query_adapter.dart:53:7)
E/flutter (23265): #1 _$SettingsDao.findByKey2 (package:vr360newtablet/vr360_database.g.dart:892:26)
我尝试通过流接收数据,它也为空。
我使用的是Floor v1.5.0
这是由表名
Settings
引起的,这可能是一个“保留字”。有两种方法可以解决这个问题:
Fist:您可以创建查询并在表名称上添加双引号,例如:
@Query("""
SELECT *
FROM "Settings"
WHERE key = 'update_date_time'
""")
Future<Settings?> findByKey();
您正确处理此问题的构建将会正常工作
第二:你可以更改你的表名。