Android中的SQL参数化查询
我一直在寻找Android中的参数化查询的接口/类,它有点混乱。Android中的SQL参数化查询
有人能说清楚什么是最好的(和最安全的)之间:
-
使用SQLiteDatabase.query()使用SQLiteDatabase.rawQuery()
- 使用SQLiteQueryBuilder使用SQLiteStatement
- 使用compileStatement()
- 使用managedQuery()
- 使用ContentValues
- 使用其他内容,例如execSQL()
任何人都可以解释为什么有这么多的存在,它们之间有什么区别,什么是最好的方式来绑定查询参数?
我一直在寻找Android中的参数化查询的接口/类,它有点混乱。
不是。
有人能说清楚什么是数一数二的(最安全):
没有,因为你没有定义你认为是“最佳”的标准。
使用SQLiteDatabase.query() 使用SQLiteDatabase.rawQuery()
就个人而言,这些中,我使用rawQuery()
,因为我发现它是最可读的。恕我直言,query()
更适用于您试图从单个部分(例如表名,列的列表)中构造SELECT语句的情况,因为可能有些部分是可变的(例如,针对不同用户的不同表)。在一天结束时,他们都做同样的事情。 query()
使用SQLiteQueryBuilder
(见下文)。
()
使用SQLiteStatement 使用compileStatement这是同样的事情。 SQLiteStatement
是Java被称为“类”的东西。 Java被称为“方法”的是compileStatement()
。 compileStatement()
方法返回SQLiteStatement
类的实例。
SQLiteStatement
对于查询通常不是很有用,因为它不能返回完整的结果集,除了单列/单行响应。
使用SQLiteQueryBuilder
这是建设从单件查询的另一种方式。它适用于多方决定查询内容的情况,例如ContentProvider
和该ContentProvider
的使用者。除此之外,最后它执行rawQuery()
。因此,直接使用SQLiteQueryBuilder
或使用rawQuery()
的结果没有显着差异。
()使用managedQuery
这已被弃用,在任何情况下是不相关的SQLiteDatabase
。
使用ContentValues
这有什么好做对抗SQLiteDatabase
查询。
任何人都可以解释为什么这么多存在
一些服务于不同的角色,在具有无关针对SQLiteDatabase
查询许多情况下。
对于你的名单(rawQuery()
,query()
和SQLiteQueryBuilder
)的三个有效的选项,他们都做同样的事情:query()
使用SQLiteQueryBuilder
和SQLiteQueryBuilder
使用rawQuery()
。唯一的区别在于SQL SELECT
语句的构造方式。
非常感谢,现在它更清晰一点! – 2012-02-08 20:27:33