SQLite和Android。如何在查询中使用字符串?

时间:2010-07-17 01:39:34

标签: android sqlite

我有一个查询,可以将数据库中的所有内容提取到列表视图中。

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是一个扩展应用程序的类。

2 个答案:

答案 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。