
Originariamente inviato da
13ciccio87
Salve ragazzi, sono un pò stranito da questo mio problema e chiedo proprio a voi che forse sapete dirmi dove sbaglio.
Ho usato qualche volta il database sqlite in java e c#, ma ora che devo usarlo in android mi trovo in difficoltà (forse perchè è integrato).
In pratica inserisco i dati nel database come spiegato in molte guide online e funziona, in quanto nel momento in cui prelevo tutti i dati insieme dal database ho tutti i dati belli che salvati, quando eseguo una query su una determinata colonna mi da errore dicendomi che c'è un errore nell'esecuzione della query in quanto la colonna cercata non esiste.
Dato che inizialmente è vero che non esiste nessun problema, ma anche nel caso in cui esiste mi dice comunque che c'è lo stesso errore.
Uso la riga di codice:
Cursor c = db.query(true, TABELLA, COLONNE, NOME + "=" + nome, null, null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
Le cose scritte in maiuscolo sono dei metadati che si riferiscono ai nomi reali (per forza giusti dato che li uso anche nella insert).
L'errore potrebbe essere che faccio la ricerca su un elemento che non è ID?
Come posso eseguire la query su un elemento che non è ID? ho anche provato a scrivere a mano la query (come facevo in java) scrivendo "SELECT * FROM utenti WHERE nome='" + nome + "'" e neanche questo funziona.
Help me!!!!
Ciao,
quindi nel tentativo di reperire i dati con la query per memorizzarli in un Cursor (utilizzando il metodo .query della classe sqLiteDatabase) ti dice che la colonna non esiste? Eventualmente riesci a postare l'intero errore?
E' possibile che nel momento in cui esegui la query il db sia vuoto.
Sicuramente ad un certo punto del codice utilizzerai il metodo .getReadableDatabase() (della classe sqLiteHelper), attenzione perchè il metodo .getReadableDatabase(), se non trova un file sqlite presente all'apertura, ne crea uno vuoto ed è possibile che tu fai la select sul db vuoto, quindi sia la tabella sia la colonna indicata non sono esistenti.
Per verificare se il db è vuoto puoi provare a fare una query sulla tabella 'android_metadata' (select * from android_metadata). Questa è una tabella di base che viene sempre creata di default alla creazione di un db sqlite android.
Inoltre volevo consigliarti due metodi della classe sqLiteDatabase, a mio avviso più comodi per lavorare con sqlite, al posto di db.query(true, TABELLA, COLONNE, NOME + "=" + nome, null, null, null, null, null):
Il metodo 'rawQuery', accetta due parametri e ritorna ugualmente un Cursor, la comodità è che accetta direttamente la stringa della query, es.
codice:
String sql = "SELECT * FROM utenti";
Cursor c = sqLiteDatabase.rawQuery(sql, null);
e il metodo .execSQL, per insert/update, es:
codice:
String sql = "INSERT INTO Utenti (_id, nome, cognome) VALUES (1, 'primo nome', 'primo cognome')";
sqLiteDatabase.execSQL(sql);
Prova comunque a postare parte integrante del codice in modo da poterlo analizzare