2010-07-17 27 views
2

我有一个查询,将数据库中的所有内容拉入列表视图。SQLite和Android。我如何在查询中使用字符串?

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())工作??资源是扩展应用程序的类。

回答

3

首先,发布错误消息而不是“没有骰子”会有帮助。其次,请阅读文档SQLiteDatabase.query()。像“FROM”和“HAVING”这样的SQL关键字不应构成方法调用的一部分。

您已经将表名作为第一个参数传递给query(),所以编写“FROM DATABASE_NAME WHERE ...”既冗余又会导致无效查询形成。

第三,您不能传递Java变量名称作为selection参数字符串—的一部分,您需要有一个字符串,如: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); 
+0

如何使用字符串在我的查询?简单介绍如何比较Having子句中的字符串值? – 2015-02-10 13:42:25

2

使用WHERE子句; HAVING仅与GROUP BY一起使用。

+0

会 SELECT * FROM DATABASE_TABLE WHERE KEY_HOMEID =((资源)this.getApplication())getjournalId()); 工作?我应该在哪里与查询相关? – Brian 2010-07-17 02:24:17

+0

公共光标fetchAllNotes(字符串journalId){ 返回mDb.query(DATABASE_TABLE,新的String [] {KEY_ROWID,KEY_HEIGHT, \t KEY_BODY,KEY_HOMEID}, “FROM DATABASE_TABLE WHERE KEY_HOMEID = journalId”,NULL,NULL,NULL,NULL,空值); 多数民众赞成在哪里我现在仍然没有骰子 – Brian 2010-07-17 12:57:07

+0

'HAVING仅用于聚合函数' – 2015-02-10 10:42:11