SQLiteQueryBuilder.query()vs SQLiteDatabase.query()

时间:2013-06-21 07:39:41

标签: android sqlite

这两种方法有什么区别? 对我来说,似乎SQLiteDatabase的唯一好处是它能够使用不同的数据库。我是对的吗?

2 个答案:

答案 0 :(得分:27)

主要方法是SQLiteDatabase#rawQuery()SQLiteDatabase#query()SQLiteQueryBuilder都只是组成SQL的助手。

SQLiteDatabase#query()只能组成一个表中的简单查询。 SQLiteQueryBuilder可以创建联接,联合等。由于SQLiteQueryBuilder是一个额外的对象,所以只有在你需要它的时候才能构建它。

就我个人而言,我认为任何非平凡的SQL都比SQL更容易被读取,因此我会使用rawQuery而不是SQLiteQueryBuilder,但这是一个品味问题以及你对SQL的了解程度。如果您想要以不同方式组合在一起的常见子查询,SQLiteQueryBuilder也可能有用。

实际上我更喜欢使用预处理语句,因为与其执行相比,SQL的编译速度较慢,并且因为它避免了对可能不受信任的值执行字符串操作。我一开始找不到API,因为出于某种奇怪的原因,它被称为SQLiteDatabase#compileStatement,而不是底层C API中使用的常用prepare

答案 1 :(得分:4)

如果要对多个表进行连接,SQLiteQueryBuilder非常有用。如果您在GrepCode上查看源代码,它有几种方便的方法:SQLiteQueryBuilder

否则,我无法想到使用SQLiteQueryBuilder而不是其他查询数据库的方法。