0

我写了这个 rawQuery,它给了我一个空游标:

String query = "SELECT * FROM " + TBL_NAME + " WHERE ? = ?";
String[] args = new String[] {COL_NAME, Long.toString(id)};
Cursor c = db.rawQuery(query, args);

但是,如果我执行以下查询,我会得到预期的结果:

String query = "SELECT * FROM " + TBL_NAME + " WHERE " + COL_NAME + " = " + Long.toString(id);
Cursor c = db.rawQuery(query, null);

我收集到我不能使用表名作为“rawQuery”方法的参数之一。但我不确定为什么不(我认为它用''包围了论点,但这只是一个猜测)。

除此之外,我得出的结论是,应该只使用 args 来将用户输入包含到查询中,在这方面,使用SQLiteStatement.

总之:我应该在哪里(如果可能的话)在 rawQuery 中使用 args (而不是仅仅在字符串中连接)。为什么我应该使用 rawQuery 而不是 SQLiteStatement(或简单的查询)?

4

1 回答 1

1

据我所知,COL_NAME 不能用“?”代替。Android 只需要“?” 作为“论据”,而不是“选择”

final String query = "SELECT * FROM " + TBL_NAME + " WHERE COL_NAME=?";
final String[] args = new String[] {Long.toString(id)};
final Cursor c = db.rawQuery(query, args);

或者更好地使用这种方法

query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

在你的情况下,它会是这样的:

final String[] args = new String[] {Long.toString(id)};
final Cursor c = db.query(TBL_NAME, null, COL_NAME + "=?", args, null, null, null);
于 2013-05-21T08:45:10.423 回答