2011-02-08 99 views
2

我有一個Android應用程序中有五個表的數據庫。我一直在衝浪尋找一種方法來將條件放在查詢中(其中,& &,或)。在Android中構建SQL查詢的最佳方式是什麼?

我的查詢的形式爲:

public Cursor getAlternative(int questionid) { 
    Cursor cursor = mDb.query(DBTABLE_ALTERNATIVE, new String[] { KEY_ALT }, KEY_QID + "=" + questionid, null, null, null, null, null);     
    return cursor; 
} 

但我發現,很多人寫自己與普通SQL查詢,例如:

Cursor c = myDB.query("SELECT FirstName,Age" + 
        " FROM " + MY_DATABASE_TABLE 
        + " WHERE Age > 10 LIMIT 7;", 
        null); 

什麼是最有效的方法是什麼?對我來說,使用常規的SQL語句似乎更容易,但是在閱讀完Android Dev站點上的教程之後,我開始形成如上所述的查詢。

問題2:如果我使用第一種方式,我該如何使用兩個條件?假設我有兩個參數,questionidcategoryid,我該如何將下一個KEY_CID +「=」+類別ID放在那裏?

我試過& &和AND,但似乎沒有工作。謝謝。

+0

閱讀Java StringBuffer類。將StringBuffer.append()調用串在一起比直接串連接更好。恩。 StringBuffer buffer = new StringBuffer(); buffer.append(「select firstname,age」); buffer.append(「from」); buffer.append(my_database_table); ... – DwB 2011-02-08 16:50:11

回答

1

什麼是最有效的方法?

這取決於...但一般來說第二種方法會更快。爲什麼?因爲它不需要使用查詢方法所需的參數來構建查詢字符串。

但是,我寧願使用第一種方式,因爲它不太容易出錯。

問題2.如果我使用第一種方法,我該如何使用兩個條件?

它應該是這樣的:

KEY_QID + "=" + questionid + " AND " +KEY_CATID + "=" + categoryid 
+0

把「AND」工作正常,現在看起來很明顯:)。而我寧願使用較少的容易出錯的方式,因爲我的代碼應該被重新使用。然而,有趣的是,對於哪種方式最適合形成查詢有很多意見。謝謝你的時間! – kakka47 2011-02-08 20:22:05

1

我不知道如果關於字符串和StringBuffers簡單意義(StringBuilder的還要好會)成立,作爲SQL引擎還需要解析再次查詢字符串。 db.query()方式的優點是查詢的某些部分可以以預解析的方式存儲(認爲是「PreparedStatement」)。特別是如果參數沒有放入字符串中,而是作爲佔位符,則可以使用

E.g. where KEY_QID=? AND KEY_CATID=?

這裏的基本查詢「保持不變」,系統可以優化。

相關問題