楼层参数化查询

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

我正在尝试获得特定日期真实的会话。 这是 Dao 代码。

  @Query('SELECT * FROM Session WHERE :day IS 1') // TRUE WAS NOT WORKING FOR SOME REASON
  Stream<List<Session>> getSessionByDay(String day);

这就是实体

@entity
class Session {
  @primaryKey
  final int id;
  ...
  final bool sunday;
  ...

  Session(
      {required this.id,
      ...
      this.sunday = false,
      ...
      });
}

这是电话

 database.sessionDao.getSessionByDay('sunday'),

当我使用这样的东西时,它会起作用

@Query(SELECT * FROM Session WHERE sunday IS 1)

我没有遇到任何错误。

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

要实现基于特定日期动态选择会话,您不能直接在查询中传递列名作为参数,例如:day。这是因为列名不能像值一样在 SQL 查询中参数化。相反,您需要一种不同的方法来根据日期动态构建查询。

    abstract class SessionDao {
  @Query('SELECT * FROM Session WHERE sunday = :isTrue')
  Stream<List<Session>> getSessionsOnSunday(bool isTrue);

  @Query('SELECT * FROM Session WHERE monday = :isTrue')
  Stream<List<Session>> getSessionsOnMonday(bool isTrue);

  // Add similar methods for other days of the week

  Stream<List<Session>> getSessionByDay(String day) {
    switch (day.toLowerCase()) {
      case 'sunday':
        return getSessionsOnSunday(true);
      case 'monday':
        return getSessionsOnMonday(true);
      // Add similar cases for other days of the week
      default:
        throw Exception('Invalid day');
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.