2010-07-17 28 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