Qual è la differenza esatta tra l'uso di rawquery ed execSQL ?? Durante la scrittura di una query nell'attività di Android, quando utilizzare rawquery e quando utilizzare execSQL?differenza tra rawquery ed execSQL nel database sqlite Android
risposta
Da documentazione API:
eseguire una singola istruzione SQL che NON è un SELECT o qualsiasi altra istruzione SQL che restituisce i dati.
void execSQL (String sql, Object[] bindArgs)
eseguire una singola istruzione SQL che non è una SELECT/INSERT/UPDATE/DELETE.
La documentazione è incoerente ma si comportano allo stesso modo. La documentazione di quest'ultimo è più approfondita.
Cursor rawQuery (String sql, String[] selectionArgs)
Esegue l'SQL fornito e restituisce un cursore sopra il set di risultati.
Utilizzi per rawQuery
sono:
- Si desidera interrogare il database con una dichiarazione
SELECT
.
=>rawQuery("SELECT ...
restituisce un set di righe e colonne in unCursor
.- E 'più efficiente usare
DatabaseUtils.longForQuery(SQLiteDatabase, String, String[])
oDatabaseUtils.stringForQuery(...)
nei casi c'è solo un risultato della query 1x1, come daSELECT count(*) FROM table
(che ha anche un proprio metodo dedicato:DatabaseUtils.queryNumEntries(...)
) - questo salta creazione di un oggettoCursor
& semplifica il codice dal momento che ci è anche niente da chiudere, MoveToNext, ecc
- E 'più efficiente usare
- casi speciali come
PRAGMA table_info
che restituisce i dati in righe (vedi this question) - Nota: non utilizzare
rawQuery
perINSERT
,UPDATE
oDELETE
o qualsiasi altra cosa che modifica il database. Ti imbatterai in "Why does a delete rawQuery need a moveToFirst in order to actually delete the rows?". Il motivo è che le query possono posticipare la lettura del risultato fino a quando non è necessario (= accesso al cursore) che significa per il ritardo di SQLite execution of the statement.
Utilizza per execSQL
sono:
- si dispone di "istruzioni" per il database. Ad esempio
CREATE TABLE
(o qualsiasi altra istruzioneCREATE
, ad es.CREATE INDEX
),DROP
,PRAGMA
s che impostano le proprietà piuttosto che restituirli, ... INSERT
,UPDATE
oDELETE
quando non sei interessato alla quantità di righe modificate o l'id riga dell'ultima inserto.- Quando avete bisogno di quelli, o utilizzare i
update()
,insert()
,delete()
metodi o utilizzare una seconda dichiarazione di leggere quelli:DatabaseUtils.longForQuery
sia conSELECT last_insert_rowid()
oSELECT changes()
. Entrambi restituiscono solo 1 valore intero. (Vedi "Get updated rows count from SQLite in Android using a raw query?" e “SELECT last_insert_rowid()” returns always “0”)
- Quando avete bisogno di quelli, o utilizzare i
- Tutto il resto che si basa su l'esecuzione di una dichiarazione.
se si desidera eseguire qualcosa nel database senza riguardante la sua uscita (ad esempio, creare/modificare tabelle), quindi utilizzare execSQL, ma se vi aspettate alcuni risultati in cambio contro la query (ad esempio selezionare i record), allora utilizzare rawQuery
- 1. Parametri rawquery SQLite Android
- 2. SQLite Android: quale query ("query" o "rawQuery") è più veloce?
- 3. Sqlite Seleziona query con rawQuery su Android
- 4. Differenza tra database MySQL/SQLite/etc?
- 5. Database SQLite Android condiviso tra le attività
- 6. Differenza tra iPhone Simulator ed Emulatore Android
- 7. Memorizzazione di valuta nel database Android SQlite
- 8. Differenza tra coredata e sqlite
- 9. Come trasformare un database MSSQL nel database SQLite per Android
- 10. Schema del database Sqlite Android
- 11. synchronize database sqlite Android
- 12. Differenza tra isObservable ed isSubscribable
- 13. Differenza tra interrupt ed evento
- 14. Come memorizzare l'oggetto nel database SQLite?
- 15. Android e SQLite: quando utilizzare il punto e virgola per terminare le istruzioni?
- 16. Differenza tra tipo ed entità nel datastore GAE?
- 17. Differenza tra intenti impliciti ed espliciti
- 18. Condivisione del database sqlite tra più attività Android
- 19. Crea database SQLite in Android
- 20. Android - Memorizzazione di dati sensibili nel database sqlite
- 21. Creazione di tabelle nel database sqlite su android
- 22. Memorizza oggetti personalizzati (Oggetto definito dall'utente) nel database SQLite Android
- 23. Come inserire dati nel database SQLite in Android?
- 24. Inserire dati JSON nel database SQLite in Android
- 25. Come incrementare il campo nel database Android sqlite
- 26. Dati non inseriti nel database Sqlite in Android
- 27. registrazione 3 tabelle nel database SQLite
- 28. Importazione ed interrogazione tramite un database SQLite in Swift - iOS
- 29. Qual è la differenza tra SQLite e SQL
- 30. La differenza tra enum ed enum class?
chiarito .. execSQL non restituisce nulla e utilizzato per la creazione, l'aggiornamento ecc. e rawQuery restituisce i cursori ecc. –
Grazie mille per la spiegazione dettagliata :) Saluti !!! –