Android中的SQLiteDatabase.query()语法

时间:2014-02-25 07:38:38

标签: android sqlite syntax

此查询会不断返回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的值。
  • Othewise dr获取NOT NULL,以便查询找到所有日期。

String st用于“加油站”。

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

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用?仅绑定文字,而不是部分表达。

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

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

这在语法上是不正确的。

要将bind args与此类查询一起使用,请执行类似

的查询
(adate BETWEEN ? AND ?) AND (station = ?)

将args绑定为"2004-03-01", "2004-06-01", "Shell"

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