这两种方法有什么区别?对我来说,似乎 SQLiteDatabase 的唯一好处是它能够使用不同的数据库。我对吗?
2 回答
主要方法是SQLiteDatabase#rawQuery()
。两者SQLiteDatabase#query()
和SQLiteQueryBuilder
都只是编写 SQL 的助手。
SQLiteDatabase#query()
只能从一张表中组合简单的查询。可以创建连接、SQLiteQueryBuilder
联合等。由于SQLiteQueryBuilder
它是一个额外的对象,因此只有在需要它的力量时才能构建它。
就我个人而言,我认为任何非平凡的 SQL 都比 SQL 更容易阅读,而不是像这样由 helper 组成的片段,所以我会使用rawQuery
over SQLiteQueryBuilder
,但这是一个品味问题,以及你对 SQL 的了解程度。SQLiteQueryBuilder
如果您有一些想要以不同方式组合在一起的常见子查询,这也可能很有用。
事实上,我更喜欢使用准备好的语句,因为 SQL 的编译比它的执行速度慢,而且因为它避免了对可能不受信任的值进行字符串操作。起初我找不到 API,因为出于某种奇怪的原因,它被调用SQLiteDatabase#compileStatement
而不是prepare
底层 C API 中通常使用的。
如果您想对多个表进行连接,SQLiteQueryBuilder 很有用。如果您在 GrepCode 上查看源代码,它有几种方便的方法:SQLiteQueryBuilder
否则,我想不出使用 SQLiteQueryBuilder 而不是其他查询数据库的方法的充分理由。