2012-02-08 22 views
5

He estado buscando qué interfaces/clases existen en Android para consultas parametrizadas y es un desastre.SQL consultas parametrizadas en Android

Puede alguien que quede claro cuál es la mejor (y más seguro) entre:

  • usando SQLiteDatabase.query()
  • usando SQLiteDatabase.rawQuery()
  • usando SQLiteStatement
  • usando SQLiteQueryBuilder
  • usando compileStatement()
  • usando managedQuery()
  • usando ContentValues ​​
  • usando algo más, p. execSQL()

¿Alguien puede explicar por qué existen tantos, cuál es la diferencia entre ellos y cuál es la mejor manera de tener parámetros de vinculación para querys?

Respuesta

9

He estado buscando qué interfaces/clases existen en Android para las consultas parametrizadas y es un desastre.

Realmente no.

Puede alguien que quede claro cuál es la mejor (y más seguro) entre:

No, porque no ha definido lo que cree que es el criterio de "mejor".

usando SQLiteDatabase.query() usando SQLiteDatabase.rawQuery()

En lo personal, de éstos, utilizo rawQuery(), ya que parece que es la más legible. En mi humilde opinión, query() es más para casos en los que intenta construir una declaración SELECT a partir de piezas individuales (por ejemplo, nombre de tabla, lista de columnas), porque tal vez parte de ella es variable (por ejemplo, diferentes tablas para diferentes usuarios). Al final del día, ambos hacen lo mismo. query() utiliza SQLiteQueryBuilder debajo de las cubiertas (ver a continuación).

usando SQLiteStatement usando compileStatement()

Estos son la misma cosa. SQLiteStatement es a lo que Java se refiere como una "clase". compileStatement() es a lo que Java se refiere como un "método". El método compileStatement() devuelve una instancia de la clase SQLiteStatement.

SQLiteStatement generalmente no es útil para consultas, ya que no puede devolver conjuntos de resultados completos, excepto para respuestas de columna única/fila única.

usando SQLiteQueryBuilder

Ésta es otra manera de construir una consulta a partir de piezas individuales. Es útil en casos donde varias partes pueden decidir qué entra en la consulta, como ContentProvider y un consumidor de ese ContentProvider. Más allá de eso, sin embargo, al final, ejecuta un rawQuery(). Por lo tanto, no hay una diferencia significativa en los resultados de usar SQLiteQueryBuilder o usar rawQuery() directamente.

usando managedQuery()

Este es obsoleto y no está relacionada con SQLiteDatabase en cualquier caso.

utilizando ContentValues ​​

Esto no tiene nada que ver con consultas en una SQLiteDatabase.

Puede alguien explicar por qué existen tantos

Algunos sirven distintas funciones, en muchos casos no tienen nada que ver con consultas en una SQLiteDatabase.

Con respecto a las tres opciones válidas fuera de su lista (rawQuery(), query(), y SQLiteQueryBuilder), todos ellos hacen lo mismo: query() utiliza SQLiteQueryBuilder y SQLiteQueryBuilder utiliza rawQuery(). La única diferencia está en cómo se construye la instrucción SQL SELECT.

+0

muchas gracias, es un poco más claro ahora! –