为什么我的查询不支持 List 返回类型?

问题描述 投票:0回答:1

实体

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

flutter sqlite sqflite flutter-datatable flutter-floor
1个回答
0
投票

这是由表名

Settings
引起的,这可能是一个“保留字”。有两种方法可以解决这个问题:

Fist:您可以创建查询并在表名称上添加双引号,例如:

@Query("""
 SELECT * 
 FROM "Settings"
 WHERE key = 'update_date_time'
""")
Future<Settings?> findByKey();

您正确处理此问题的构建将会正常工作

第二:你可以更改你的表名。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.