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
.
muchas gracias, es un poco más claro ahora! –