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()使用SQLiteQueryBuilderSQLiteQueryBuilder使用rawQuery()。唯一的区别在于SQL SELECT语句的构造方式。

+0

非常感谢,现在它更清晰一点! – 2012-02-08 20:27:33