gpt4 book ai didi

android - Android 中的 SQLiteDatabase.query() 语法

转载 作者:行者123 更新时间:2023-11-30 03:04:35 37 4
gpt4 key购买 nike

此查询不断返回类似 error near ? 的错误。

public Cursor getRow2( String st, String dr) throws SQLException {
String whereClause = "(adate ?) AND (station ?)";
String[] whereArgs = new String[] { dr, st };
String orderBy = "adate";

Cursor mCursor = db.query(DATABASE_TABLE, columns, whereClause, whereArgs,
null, null, orderBy);

String dr 用于“数据范围”。

  • 如果用户确实指定了这两个日期,则 dr 会得到一个类似于 BETWEEN 2004-03-01 AND 2004-06-01 的值。
  • 否则 dr 得到 NOT NULL 以便查询找到所有日期。

String st 代表“加油站”。

  • 如果用户提供站名,st 会得到一个类似'Shell' 的字符串。
  • 否则 st 获取 NOT NULL 以便找到所有站。

非常感谢。

最佳答案

您可以使用 ? 来仅绑定(bind)文字,而不是部分表达式。​​

(adate ?) AND (station ?) 不是有效的表达式。将第一个 arg 绑定(bind)到 BETWEEN 2004-03-01 AND 2004-06-01 和第二个 Shell 本质上是

(adate 'BETWEEN 2004-03-01 AND 2004-06-01') AND (station 'Shell')

这在语法上是不正确的。

要在这样的查询中使用绑定(bind)参数,请像这样进行查询

(adate BETWEEN ? AND ?) AND (station = ?)

将参数绑定(bind)为 "2004-03-01"、"2004-06-01"、"Shell"

对于“未指定”的情况,最好完全使用不同的查询。

关于android - Android 中的 SQLiteDatabase.query() 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22007574/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com