提问人:Reza Asgharian 提问时间:2/19/2023 更新时间:2/20/2023 访问量:40
SQLite 本地日期(Shamsi)比较 [duplicate]
SQLite Local Date(Shamsi) comparison [duplicate]
问:
我已经在我的SQLite数据库中存储了带有本地日期(Shamsi)的字段。我想获取日期在 date_1 到 date_2 之间的数据库列表。当使用如下所示的 const 值时,它有效:db!.rawQuery(("SELECT * FROM $tblVisit WHERE $colVisitDate BETWEEN '1401-10-01' AND '1401-12-29' ")
但我喜欢使用函数输入中的变量而不是常量值。我怎样才能写如下:
String? date_1, String? date_2
db!.rawQuery("SELECT * FROM $tblVisit WHERE $colVisitDate BETWEEN $date_1 AND $date_2 ")
现在,最后一个语句不返回任何列表,但第一个语句运行良好。 谢谢
答:
1赞
MikeT
2/19/2023
#1
文本/字符串值必须用单引号括起来,以便
db!.rawQuery("SELECT * FROM $tblVisit WHERE $colVisitDate BETWEEN '$date_1' AND '$date_2' ")
否则,日期(因为它们仅包含数字和运算符)被视为表达式,因此 1401-10-01 变为 1390,因此结果不寻常。
但是,这容易受到 SQL 注入的影响,因此 SQL 注入警察认为使用参数绑定是更好的做法。也就是说,code ?
占位符而不是值,例如 然后对 2 个日期值使用 rawQuery
参数(注意不能绑定组件名称和关键字)。BETWEEN ? AND ?
selectionArgs
请参阅 rawQuery
评论