使用 Sqlite flutter BETWEEN 查询返回最近 2 天的记录

Posted

技术标签:

【中文标题】使用 Sqlite flutter BETWEEN 查询返回最近 2 天的记录【英文标题】:Using Sqlite flutter BETWEEN query to return last 2 days records 【发布时间】:2020-02-21 07:02:10 【问题描述】:

我希望你们能帮助我!

我当前的代码不起作用。只会显示一条错误消息说Unhandled Exception: DatabaseException(unrecognized token: "'1582268587562" (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM my_table WHERE date BETWEEN '1582095787562' AND '1582268587562) sql 'SELECT * FROM my_table WHERE date BETWEEN '1582095787562' AND '1582268587562' args []

我正在尝试让我的 sqflite 查询返回过去 2 天的记录。这是我目前使用的查询:

Future<List<Map<String, dynamic>>> queryLastTwoDays() async 
    Database db = await instance.database;
    DateTime now = DateTime.now();
    DateTime twoDaysAgoFromNow = now.subtract(Duration(days: 2));
    var today = now.millisecondsSinceEpoch;
    var twoDaysAgo = twoDaysAgoFromNow.millisecondsSinceEpoch;
    return await db.rawQuery('''SELECT * FROM $table WHERE $columnDate BETWEEN '$twoDaysAgo' AND '$today''');
  

数据库结构

CREATE TABLE $table ( $columnId INTEGER PRIMARY KEY, $columnName TEXT NOT NULL, $columnAge INTEGER NOT NULL, $columnColour TEXT NOT NULL, $columnDate INTEGER NOT NULL )

插入数据示例:

 `DatabaseHelper.columnName : 'Breakfast',
  DatabaseHelper.columnAge  : 23,
  DatabaseHelper.columnColour : 'red',
  DatabaseHelper.columnDate : DateTime.now().millisecondsSinceEpoch,`

感谢您的帮助!

【问题讨论】:

您的问题是什么?显示的代码不起作用吗?如何?另外,请以create table ...insert ... 的几行形式提供minimal reproducible example。 meta.***.com/questions/333952/… 嘿@Yunnosch,感谢您的回复。代码不起作用。显示错误消息Unhandled Exception: DatabaseException(unrecognized token: "'1582268587562" (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM my_table WHERE date BETWEEN '1582095787562' AND '1582268587562) sql 'SELECT * FROM my_table WHERE date BETWEEN '1582095787562' AND '1582268587562' args []。我现在已经编辑了帖子以提供完整的代码。 请edit 将有用信息添加到您的问题中,而不是将其隐藏在 cmets 中。 您缺少结束语。 @Shawn 非常感谢您的帮助,在我添加了一个结束引号并在第一个三单引号和最后一个三单引号之前的空格后添加了一个空格,这非常有效。说真的,我一直在为此烦恼,你真的帮了我! 【参考方案1】:

正如Shawn 在评论中指出的那样,您生成的 SQL 缺少结束引号。查看报错信息:

...while compiling: SELECT * FROM my_table 
WHERE date BETWEEN '1582095787562' AND '1582268587562)

括号前没有结束'

我认为它来自这条线:

    return await db.rawQuery('''SELECT * FROM $table WHERE $columnDate BETWEEN '$twoDaysAgo' AND '$today''');

在三单引号之前,您需要多一个单引号。

【讨论】:

非常感谢@poolie 和@Shawn 的帮助,成功了!!!只是为了澄清任何其他阅读本文的新手,而且如果我遇到这个,我也不会再次感到困惑,这是实际工作的最终代码行。注意第一个三单引号之后的空格和最后一个三单引号之前的空格吗?好吧,在我添加这些空格之前,代码对我不起作用。 return await db.rawQuery(''' SELECT * FROM $table WHERE $columnDate BETWEEN '$twoDaysAgo' AND '$today' ''');

以上是关于使用 Sqlite flutter BETWEEN 查询返回最近 2 天的记录的主要内容,如果未能解决你的问题,请参考以下文章

目标 C,SQLite SELECT BETWEEN 问题

SQLite BETWEEN 日期错误

使用 sqlite 下拉 - Flutter

使用 sqlite、flutter app 导入数据库

在 Flutter 中访问 SQLite DB

如何在 Flutter 中使用预填充的 sqlite 数据库我的应用程序