我在我的 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 ")
现在,最后一条语句不返回任何列表,但第一个语句运行良好。 谢谢
文本/字符串值必须用单引号引起来
db!.rawQuery("SELECT * FROM $tblVisit WHERE $colVisitDate BETWEEN '$date_1' AND '$date_2' ")
否则日期,因为它们只包含数字和运算符,被认为是一个表达式,所以 1401-10-01 变成 1390,因此结果不正常。
但是,这容易受到 SQL 注入的影响,因此 SQL 注入警察 认为使用参数绑定是更好的做法。也就是说,代码?
占位符而不是值,例如BETWEEN ? AND ?
然后使用 selectionArgs
的 rawQuery
参数作为 2 个日期值(注意不能绑定组件名称和关键字)。
见原始查询