¿Cuál es la diferencia exacta entre el uso de rawquery y execSQL? Al escribir una consulta en la actividad de Android, cuándo usar rawquery y cuándo usar execSQL?diferencia entre rawquery y execSQL en la base de datos sqlite de Android
Respuesta
Desde documentación de la API:
ejecutar una única sentencia SQL que NO es un SELECT o cualquier otra instrucción SQL que devuelva datos.
void execSQL (String sql, Object[] bindArgs)
ejecutar una única sentencia SQL que no es un/insertar/ACTUALIZACIÓN seleccionar/borrar.
La documentación es inconsistente pero se comportan de la misma manera. La documentación de este último es más profunda.
Cursor rawQuery (String sql, String[] selectionArgs)
Ejecuta el SQL proporcionado y devuelve un cursor sobre el conjunto de resultados.
usos para rawQuery
son:
- que desea consultar la base de datos con una declaración
SELECT
.
=>rawQuery("SELECT ...
devuelve un conjunto de filas y columnas en unCursor
.- Es más eficaz utilizar
DatabaseUtils.longForQuery(SQLiteDatabase, String, String[])
oDatabaseUtils.stringForQuery(...)
en los casos en que sólo hay un resultado de consulta 1x1, al igual que deSELECT count(*) FROM table
(que también tiene su propio método específico:DatabaseUtils.queryNumEntries(...)
) - esto se salta la creación de un objetoCursor
& simplifica el código, ya que hay también hay nada para cerrar, MoveToNext, etc.
- Es más eficaz utilizar
- casos especiales como
PRAGMA table_info
que devuelve datos en filas (ver this question) - Nota: no use
rawQuery
paraINSERT
,UPDATE
oDELETE
o cualquier otra cosa que modifique la base de datos. Te encontrarás con "Why does a delete rawQuery need a moveToFirst in order to actually delete the rows?". La razón es que las consultas pueden diferir la lectura del resultado hasta que sea necesario (= acceso al cursor) lo que significa que SQLite demorará execution of the statement.
Usos para execSQL
son:
- usted tiene "instrucciones" para la base de datos. Como
CREATE TABLE
(o cualquier otra declaraciónCREATE
, p.CREATE INDEX
),DROP
,PRAGMA
s que establecen propiedades en lugar de devolverlos, ... INSERT
,UPDATE
oDELETE
cuando usted no está interesado en la cantidad de filas modificadas o el ID de la última fila de inserción.- Cuando necesite aquellos, o bien utilizar los
update()
,insert()
,delete()
métodos o usar una segunda declaración para leer los:DatabaseUtils.longForQuery
, ya sea con oSELECT last_insert_rowid()
SELECT changes()
. Ambos devuelven solo 1 valor entero. (Consulte "Get updated rows count from SQLite in Android using a raw query?" y “SELECT last_insert_rowid()” returns always “0”)
- Cuando necesite aquellos, o bien utilizar los
- Todo lo demás que se basa en la ejecución de una declaración.
si se desea ejecutar algo en la base de datos sin importar su salida (por ejemplo, crear/alterar tablas), a continuación, utilizar execSQL, pero si usted está esperando algunos resultados en la vuelta contra la consulta (por ejemplo, seleccionar registros) a continuación, utilizar rawQuery
- 1. Parámetros de rawquery Android SQLite
- 2. Android SQLite: ¿Qué consulta ("consulta" o "rawQuery") es más rápida?
- 3. Android ExpandableListView y base de datos SQLite
- 4. Crear base de datos SQLite en android
- 5. base de datos SQLite Android local, bloqueo, y la versión
- 6. Diferencia entre coredata y sqlite
- 7. ORM en Android SQLite y esquema de base de datos
- 8. Flushing y base de datos SQLite en android
- 9. SQLite rawQuery selectionArgs and Integers Fields
- 10. Diferencia entre las bases de datos MySQL/SQLite/etc?
- 11. Guardando ArrayList en la base de datos SQLite en Android
- 12. Insertar matriz en la base de datos SQLite en android
- 13. Crear tablas en la base de datos sqlite en android
- 14. Android - ¿Existe una base de datos SQLite?
- 15. cómo usar rawQuery en android
- 16. ¿Por qué usar la base de datos sqlite en Android?
- 17. Android explore la base de datos SQLite en el teléfono
- 18. Android - Acceso a la base de datos en línea SQlite
- 19. ¿Cuál es la diferencia entre SQLite y SQL
- 20. Cómo recuperar datos de la base de datos sqlite en android y mostrarlos en TextView
- 21. Android cambiar el nombre de la base de datos SQLite
- 22. Populating Spinner de la base de datos SQLite Android
- 23. Android: cierre de la base de datos SQLite
- 24. Diferencia entre preferencia compartida y sqlite
- 25. Android: SQLite usando la base de datos incorrecta
- 26. Compartir bases de datos sqlite entre múltiples actividades de Android
- 27. problema con la base de datos sqlite, sin tabla:
- 28. ¿Cómo extraigo la base de datos sqlite del dispositivo Android?
- 29. Cómo seleccionar datos entre dos rangos de fechas en SQLite de Android
- 30. Android: SQL rawQuery con comodín (%)
tiene claro .. execSQL duerma devuelve nada y se utiliza para crear, actualizar, etc .. y rawQuery vuelve cursores etc. –
Muchas gracias por la explicación detallada :) Saludos !!! –