我写了这个给我一个空光标的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(或简单查询)?
答案 0 :(得分: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);