Preguntas SQL parametrizadas en Android

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

¿Puede alguien aclarar cuál es el mejor (y el más seguro) entre:

  • Utilizando SQLiteDatabase.query ()
  • Utilizando SQLiteDatabase.rawQuery ()
  • Usando SQLiteStatement
  • Usando SQLiteQueryBuilder
  • Utilizando compileStatement ()
  • Utilizando managedQuery ()
  • Usando ContentValues
  • Utilizando algo más, por ejemplo, execSQL ()

¿Puede alguien explicar por qué existen tantos, cuál es la diferencia entre ellos y cuál es la mejor manera de tener parámetros de enlace para querys?

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

Realmente no.

¿Puede alguien aclarar cuál es el mejor (y el más seguro) entre:

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

Utilizando SQLiteDatabase.query () utilizando SQLiteDatabase.rawQuery ()

Personalmente, de estos, utilizo rawQuery() , ya que me parece que es el más legible. IMHO, query() es más para los casos en los que se intenta construir una sentencia SELECT de piezas individuales (por ejemplo, el nombre de la tabla, lista de columnas), porque tal vez algunos de ellos son variables (por ejemplo, diferentes tablas para diferentes usuarios). Al final del día, ambos hacen lo mismo. query() utiliza SQLiteQueryBuilder debajo de las tapas (vea abajo).

Usando SQLiteStatement usando compileStatement ()

Son lo mismo. SQLiteStatement es lo que Java se refiere como una "clase". compileStatement() es lo que Java se refiere como un "método". El método compileStatement() devuelve una instancia de la clase SQLiteStatement .

SQLiteStatement no es útil para las consultas, ya que no puede devolver conjuntos de resultados completos, excepto para las respuestas de una sola columna o una sola fila.

Usando SQLiteQueryBuilder

Esta es otra manera de construir una consulta de piezas individuales. Es útil en casos en los que varias partes deciden lo que va en la consulta, como un ContentProvider y un consumidor de ese ContentProvider . Más allá de eso, sin embargo, al final, ejecuta un rawQuery() . Por lo tanto, no hay diferencia significativa en los resultados de usar SQLiteQueryBuilder o usando rawQuery() directamente.

Utilizando managedQuery ()

Esto está obsoleto y no está relacionado con SQLiteDatabase en ningún caso.

Usando ContentValues

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

¿Puede alguien explicar por qué existen tantos

Algunos sirven diferentes funciones, en muchos casos no tienen nada que ver con las consultas en contra de una SQLiteDatabase datos SQLiteDatabase .

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

  • La base de datos Android está dañada, pero puede abrirse en SQLite Manager. ¿Recuperable?
  • android sqlite consulta con múltiples donde
  • Almacenamiento de datos en Android: almacenamiento de archivos vs base de datos SQLite vs preferencias compartidas
  • Lea el error de la carpeta sqlite from assets
  • Android sqlite CREATE TABLE SI NO EXISTE
  • Android cifrar / descifrar sqlite base de datos 100% seguro
  • Ver base de datos SQLite en el dispositivo en Android Studio
  • La columna _id no existe
  • Cómo comprobar si ya existe un valor en la base de datos en Android
  • Java.lang.illegalstateexception no abre la base de datos android
  • ¿El depurador de Android trunca mensajes de depuración?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.