我有一个查询,可以将数据库中的所有内容提取到列表视图中。
return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_HEIGHT,
KEY_BODY, KEY_HOMEID},null , null, null, null, null,null);
| String Having is the 3rd from
last null.
我只想要字段KEY_HOMEID匹配名为journalId的变量的记录,该变量应该是一个数字字符串。
我还想知道如何将变量带入我的DatabaseAdapter ......
会((resource) this.getApplication()).getjournalId())
工作吗? resource是一个扩展应用程序的类。
答案 0 :(得分:3)
首先,发布错误消息而不是“没有骰子”会有所帮助。
其次,请阅读SQLiteDatabase.query()
的文档。像“FROM”和“HAVING”这样的SQL关键字不应该成为方法调用的一部分。
您已将表名作为query()
的第一个参数传递,因此编写“FROM DATABASE_NAME WHERE ...
”既是多余的,也会导致无效的查询形成。
第三,您不能将Java变量名称作为selection
参数String的一部分传递 - 您需要具有类似于KEY_HOMEID +"="+ journalId
的字符串。
第四,使用selectionArgs
而不是将查询参数嵌入selection
通常是个好主意。特别是当你有来自用户输入的字符串或参数时
例如selection = KEY_HOMEID +"=?"
和selectionArgs = new String[] { journalId }
总的来说,您的方法调用应该如下所示:
mDb.query(DATABASE_TABLE,
new String[] { KEY_ROWID, KEY_HEIGHT,
KEY_BODY, KEY_HOMEID },
KEY_HOMEID +"=?", new String[] { journalId },
null, null, null);
答案 1 :(得分:2)
使用WHERE子句; HAVING仅用于GROUP BY。