Il campo "_id" è necessario in Android SQLite?Informazioni sul campo "_id" in Android SQLite
risposta
_id è utile quando si utilizzano gli adattatori avanzati che fanno uso di un cursore (ad esempio ResourceCursorAdapter). Viene utilizzato da questi adattatori per fornire un ID che può essere utilizzato per fare riferimento alla riga specifica nella tabella che mette in relazione l'elemento in qualunque sia l'adattatore utilizzato (ad esempio una riga in un ListView).
Non è necessario se non si intende utilizzare classi che richiedono una colonna _id in un cursore e si può anche usare "come _id" per far apparire un'altra colonna come se fosse _id nel cursore.
Grazie, esattamente quello che stavo cercando di imparare. –
In molti casi è molto conveniente avere un campo ID. Preferisco che il mio sia autoincremento (come mostrato sotto). Sto sempre trovando nuovi usi per il campo id :)
Quando arriva il momento di collegare i dati ad un adattatore, mi piace usare un alias nome di tabella per interrogare il campo id come _id
. Esempio: . In questo modo l'adattatore vede un campo chiamato _id
e tutti sono felici.
Ecco un esempio di come definisco le mie tabelle:
CREATE TABLE message (_id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, tripID TEXT, msg TEXT);
Perché non fanno uso di _ROWID_?
SQLite fornisce comunque questo valore per ogni riga, in modo tale da poterlo solo aggiungere a _id nell'istruzione select.
Bel trucco. Se crei una tabella con _id (essendo mappato su ROWID), è più semplice. –
@greenrobot, qual è la sintassi per questo? – Dori
@Dori Controlla http://www.sqlite.org/lang_createtable.html#rowid –
Tecnicamente non il campo _id
non è necessaria, se si stanno facendo uso della classe CursorAdapter
(che probabilmente si è, soprattutto se si sta lavorando con l'esempio Blocco note) allora sì
"Il Cursore deve includere una colonna denominata "_id" o questa classe non sarà lavoro"
come spiegato nella documentazione here. Sfortunatamente gli esempi di codice non lo rendono molto chiaro.
Sicuramente no. È un campo di convenienza che alcuni widget come ListView utilizzano per popolare i dati. Vedi questo buon articolo: http://www.casarini.org/blog/2009/android-contentprovider-on-sqlite-tables-without-the-_id-column/
Ovviamente se si sta creando il proprio widget dell'interfaccia utente e il proprio adattatore, non è necessario denominare la chiave primaria come "_id". Può essere qualsiasi nome tu voglia. Ma tu saresti responsabile della gestione delle raccolte di widget dell'interfaccia utente e legandoli alla riga giusta nel tuo database. "_id" è utile solo per ListView come ha sottolineato Brad.
Dal official docs ...
il cursore deve includere una colonna denominata "_id" o questa classe non funzionerà. Inoltre, l'utilizzo di MergeCursor con questa classe non funzionerà se i Cursori uniti hanno valori sovrapposti nelle rispettive colonne "_id".
E il Cursor
è:
Questa interfaccia fornisce l'accesso casuale in lettura e scrittura per il set di risultati restituito da una query di database.
In altre parole, è necessario _id
per Android SQLite (che di solito usa Cursore)
Sapete che '_id' dovrebbe essere intero o un' _id VARCHAR PRIMARY KEY' è sufficiente? –
Se si definisce la colonna _id come un intero autoincrementing in realtà è un alias per la colonna ROWID che SQLite fornisce di default (https://www.sqlite.org/lang_createtable.html#rowid).
tuo creano esigenze economico assumono la forma ...
CREATE TABLE t(_id INTEGER PRIMARY KEY ASC, y, z);
Per dimostrare questo funziona ...
UPDATE t SET _id=22 WHERE _id=11;
poi
SELECT ROWID, _id FROM t;
e troverete sia _id
e ROWID
hanno lo stesso valore.
Si noti che se si utilizza DESC in CREATE viene creata una nuova colonna e ROWID
non è sottoposto ad alias.
- 1. mongoose (mongodb) Alias _id campo
- 2. Come arrivare informazioni sul dispositivo in Android
- 3. Informazioni su Android Sicurezza Sqlite in caso di multi processo
- 4. Django campo suffisso ForeignKey con _id
- 5. Mangusta che recupera dati senza campo _id
- 6. mongo _id errore chiave duplicato campo
- 7. Informazioni sul campo copyright nell'invio dell'app iTunes Connect
- 8. sqlite android sqlite sincronizzazione sqlite
- 9. L'uso della parola chiave in SQLite Android
- 10. Visualizza database SQLite sul dispositivo in Android Studio
- 11. Informazioni sul protocollo GATT in BLE
- 12. Android: SQLite - insertWithOnConflict
- 13. Informazioni sul segreto in avanti
- 14. Informazioni sul decapaggio in Python
- 15. Come impostare _id sul documento db in Mongoose?
- 16. Come incrementare il campo nel database Android sqlite
- 17. Informazioni sul brufolo
- 18. informazioni sul codice ide
- 19. Informazioni sul codice
- 20. Attivatori SQLite in Android?
- 21. Come impostare _id in elasticsearch 2.0
- 22. Informazioni sul protocollo Bittorrent
- 23. Informazioni sul motivo dell'adattatore
- 24. Ordina per campo con SQLite
- 25. Campo Chiave primaria Reset SQLite
- 26. Filter _id range in elasticsearch
- 27. debug android: connettersi a sqlite db sul telefono
- 28. Android - SQLite ContentResolver inserisce/elimina/aggiorna sul thread UI?
- 29. Android: thread multipli che scrivono sul database SQLite
- 30. node.js mongodb .. il campo (immutabile) '_id' è stato trovato modificato
per chiunque stia toccando la pagina controlla questo https://www.sqlite.org/autoinc.html questo è veramente utile. Leggi in particolare la cosa 'ROWID'. –
La risposta corretta sarebbe "NO". Poiché il motore di database SQlite dispone già di un meccanismo che crea un ROWID univoco per ogni nuova riga inserita. E se la tua tabella ha un 'PRIMARY_KEY' allora diventerà l'alias di quel' ROW_ID'. –