23

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

4

2 回答 2

27

主要方法是SQLiteDatabase#rawQuery()。两者SQLiteDatabase#query()SQLiteQueryBuilder都只是编写 SQL 的助手。

SQLiteDatabase#query()只能从一张表中组合简单的查询。可以创建连接、SQLiteQueryBuilder联合等。由于SQLiteQueryBuilder它是一个额外的对象,因此只有在需要它的力量时才能构建它。

就我个人而言,我认为任何非平凡的 SQL 都比 SQL 更容易阅读,而不是像这样由 helper 组成的片段,所以我会使用rawQueryover SQLiteQueryBuilder,但这是一个品味问题,以及你对 SQL 的了解程度。SQLiteQueryBuilder如果您有一些想要以不同方式组合在一起的常见子查询,这也可能很有用。

事实上,我更喜欢使用准备好的语句,因为 SQL 的编译比它的执行速度慢,而且因为它避免了对可能不受信任的值进行字符串操作。起初我找不到 API,因为出于某种奇怪的原因,它被调用SQLiteDatabase#compileStatement而不是prepare底层 C API 中通常使用的。

于 2013-06-21T07:57:35.167 回答
4

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

否则,我想不出使用 SQLiteQueryBuilder 而不是其他查询数据库的方法的充分理由。

于 2014-10-09T15:36:23.550 回答