Flutter使用sqflite查询指定日期后所有行及SQL语句问题排查
现有查询语句的问题
- 索引失效问题:你的日期时间列本身存储的是ISO 8601格式的字符串,天然字典序和时间顺序完全一致,不需要用
strftime对列做格式化处理。对查询字段包裹函数会导致该列的索引完全失效,数据量较大时查询性能会大幅下降。 - 存在SQL注入风险:你当前的写法是直接将具体日期拼接入SQL语句,没有使用参数化查询,可能存在SQL注入漏洞,也容易因为特殊字符导致SQL语法报错。
- 格式匹配容错性差:如果传入的
specific_date格式不是严格的YYYY-MM-DD格式(比如出现2021/8/19这类写法),直接比较会得到错误的查询结果。
正确写法
直接对日期时间列做比较即可,不需要额外格式化:
SELECT * FROM table WHERE <column_name> >= ?
在sqflite中使用参数化查询调用即可:
// 示例:查询所有晚于等于2021-08-19的行 final result = await db.query( 'your_table_name', where: 'your_datetime_column >= ?', whereArgs: ['2021-08-19'], );
如果需要查询严格晚于指定日期(即从指定日期次日零点开始的数据),只需将whereArgs里的日期替换为目标日期的下一天即可,无需修改SQL语句。
内容的提问来源于stack exchange,提问作者bihire boris
相关产品推荐
相关产品推荐

