在Android中形成SQL查询的最佳方法是什么?

时间:2011-02-08 16:31:54

标签: android database sqlite

我在Android应用程序中有一个包含五个表的数据库。我一直在四处寻找在查询中放置条件的方法(WHERE,&&,OR)。

我的查询形式为:

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 +“=”+ categoryid放在那里?

我试过&&和AND似乎没有工作。谢谢。

2 个答案:

答案 0 :(得分:1)

  
    

最有效的方式是什么?

  

这取决于......但一般而言,第二种方式会更快。为什么?因为它不需要使用查询方法所采用的参数来构建查询字符串。

但是,我宁愿使用第一种方式,因为它不易出错。

  
    

问题2.如果我使用第一种方式,我如何使用两种条件?

  

它应该以这种方式工作:

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

答案 1 :(得分:1)

我不确定String和StringBuffers(StringBuilder会更好)的简单含义是否成立,因为SQL引擎还需要再次解析该查询字符串。 db.query()方式可能具有以下优点:查询的某些部分可以以预解析的方式存储(想想“PreparedStatement”)。特别是如果参数没有放在字符串中,而是作为占位符

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

这里基本查询“保持不变”,系统可以优化。