我一直在寻找Android中用于参数化查询的接口/类,这有点乱。
有人能说清楚其中最好的(也是最安全的):
任何人都可以解释为什么存在这么多,它们之间的区别是什么是为查询提供绑定参数的最佳方法?
答案 0 :(得分:9)
我一直在寻找Android中用于参数化查询的接口/类,这有点乱。
不是。
有人能说清楚其中最好的(也是最安全的):
不,因为您尚未定义您认为“最佳”的标准。
使用SQLiteDatabase.query() 使用SQLiteDatabase.rawQuery()
就个人而言,我使用rawQuery()
,因为我发现它是最具可读性的。恕我直言,query()
更适用于您尝试从各个部分(例如,表名,列列表)构造SELECT语句的情况,因为可能其中一些是可变的(例如,不同用户的不同表) 。在一天结束时,他们都做同样的事情。 query()
使用SQLiteQueryBuilder
封面(见下文)。
使用SQLiteStatement 使用compileStatement()
这些都是一样的。 SQLiteStatement
是Java所称的“类”。 compileStatement()
是Java所称的“方法”。 compileStatement()
方法返回SQLiteStatement
类的实例。
SQLiteStatement
通常对查询没用,因为除了单列/单行响应之外,它不能返回完整的结果集。
使用SQLiteQueryBuilder
这是从单个部分构造查询的另一种方法。在多方决定查询内容的情况下(例如ContentProvider
和ContentProvider
的使用者),此功能非常有用。除此之外,最后,它执行rawQuery()
。因此,使用SQLiteQueryBuilder
或直接使用rawQuery()
的结果没有显着差异。
使用managedQuery()
这已被弃用,并且在任何情况下都与SQLiteDatabase
无关。
使用ContentValues
这与针对SQLiteDatabase
的查询无关。
任何人都可以解释为什么存在这么多
有些角色扮演不同的角色,在很多情况下与SQLiteDatabase
的查询无关。
关于名单中的三个有效选项(rawQuery()
,query()
和SQLiteQueryBuilder
),他们都做同样的事情:query()
使用{{ 1}},SQLiteQueryBuilder
使用SQLiteQueryBuilder
。唯一的区别在于如何构造SQL rawQuery()
语句。