这两种方法有什么区别? 对我来说,似乎SQLiteDatabase的唯一好处是它能够使用不同的数据库。我是对的吗?
答案 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而不是其他查询数据库的方法。