2011-02-08 98 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=?

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

相关问题