Autore Topic: Lettura dati database qlite  (Letto 947 volte)

Offline Michele77

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc desire hd
  • Sistema operativo:
    windows
Lettura dati database qlite
« il: 12 Aprile 2013, 23:17:42 CEST »
0
Ciao ragazzi,
grazie al vostro aiuto sono riuscito a copiare il miodatabase dalla cartella asset .
Adesso vorrei sapere, co faccio a leggere questi dati?
In pratica vorrei creare un Layout (legdati) dove insersco una txtbox (txtNome),  un bottone e filtrare la ricerca
(select  _id, nome,cognome from miodb where cognome = txtNome)
Mi potete dare qualche aiuto?

Forse e' sufficente inserire
il segunete codice nell'activity COYdbActivity ?
Codice (Java): [Seleziona]
Cursor cursor = db.mDb.rawQuery("SELECT nome, cognome FROM anagrafica WHERE nome = textbox, null);  

 while(cursor.moveToNext())


 {


           String nome = cursor.getString(cursor.getColumnIndex("
nome")); //seleziono nome


         String cognome = cursor.getString(cursor.getColumnIndex("
cognome")); //seleziono cognome

 }

 cursor.close(); //chiusura del cursor                    

 ck.close(); //chiusura del cursor

 db.close(); //chiusura del db

ma poi dove vedo i risultati?
« Ultima modifica: 12 Aprile 2013, 23:37:27 CEST da Michele77 »

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Lettura dati database qlite
« Risposta #1 il: 12 Aprile 2013, 23:41:17 CEST »
0
Ciao Michele, sono contento che col nostro aiuto sia riuscito in quello che desideravi e ti ringrazio di tutti quei Thanks, però credo che sia arrivata ora di ascoltare i suggerimenti che ti vengono dati.
Lo scopo di questo forum (scusate se mi permetto) è quello di aiutarsi a vicenda per capire come funziona questo nostro amato mondo della programmazione android e non quello di creare codice "ad hoc".
E' sconveniente sopratutto per te che non riusciresti a capire bene quello che accade quando scrivi del codice col "copia e incolla", quindi ti invito nuovamente a seguire questo ottimo tutorial di Qlimax:
http://www.anddev.it/index.php/topic,856.0.html

Quando avrai terminato la comprensione di quel tutorial avrai le idee più chiare e potrai fare domande più mirate.
Che ne dici?  ;-)

Naturalmente spero che tu non te la prenda e capirai il tono propositivo e non solo critico.
Se ti sono stato utile premi "Thanks" ;-)

Offline Michele77

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc desire hd
  • Sistema operativo:
    windows
Re:Lettura dati database qlite
« Risposta #2 il: 13 Aprile 2013, 09:27:45 CEST »
0
Hai ragione, ma una cosa non mi e' chiara.
Nel tutorial che mi hai postato il database viene creato dala classe; nel mio caso io il database gia ce l'ho.
Quindi mi sembra un o' diverso l'approcio.
O sbaglio ?
« Ultima modifica: 13 Aprile 2013, 09:35:08 CEST da Michele77 »

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Lettura dati database qlite
« Risposta #3 il: 16 Aprile 2013, 12:48:13 CEST »
0
Hai risolto?
Se ti sono stato utile premi "Thanks" ;-)

Offline zababa

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia Miro
  • Sistema operativo:
    Windows 7
Re:Lettura dati database qlite
« Risposta #4 il: 16 Aprile 2013, 13:39:41 CEST »
+1
Ciao Michele :)

Anch'io ho avuto la necessità di avere un database iniziale nella mia app. Comunque, non sono riuscito a copiare ed usarlo come ho voluto, e dopo averci pensato un pò, ho trovato una soluzione diversa, forse anche più aderente al mondo Android.
Quello che faccio èche creo il database durante la prima esecuzione del programma, ed inserisco tutti i dati che mi servono. Così, anche se dopo ho bisogno di creare nuovi dati, tabelle, insomma a gestire tutto ciò, il framework mi da tutti gli strumenti necessari.

In più, volevo indicare che ho dovuto usare due class per le operazioni con il database: una che si occupa della creazione e gestione della tabella, e una che si occupa della gestione del flusso di dati (select, insert, delete...).

Spero ti sia stato utile! :)

Saluti!
Toast.makeText(getContext(), "Hello there!", Toast.LENGTH_SHORT).show();

Offline Michele77

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc desire hd
  • Sistema operativo:
    windows
Re:Lettura dati database qlite
« Risposta #5 il: 16 Aprile 2013, 13:44:18 CEST »
0
Eu4ia: No, non ho risolto!


Offline zababa

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia Miro
  • Sistema operativo:
    Windows 7
Re:Lettura dati database qlite
« Risposta #6 il: 16 Aprile 2013, 13:55:54 CEST »
+2
E poi...

Codice (Java): [Seleziona]
// Si presume che db.mDb = SQLiteOpenHelper.getReadableDatabase();
Cursor cursor = db.mDb.rawQuery("SELECT nome, cognome FROM anagrafica WHERE nome =" +  textbox.getText().toString(), null);  

 while(cursor.moveToNext())
 {
       String nome = cursor.getString(cursor.getColumnIndex("nome")); //seleziono nome
       String cognome = cursor.getString(cursor.getColumnIndex("cognome")); //seleziono cognome
 }

 cursor.close();  //chiusura del cursor                    
 ck.close();        //chiusura del cursor
 db.close();       //chiusura del db
Toast.makeText(getContext(), "Hello there!", Toast.LENGTH_SHORT).show();

Offline Michele77

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc desire hd
  • Sistema operativo:
    windows
Re:Lettura dati database qlite
« Risposta #7 il: 16 Aprile 2013, 14:16:55 CEST »
0
Grazie zababa, appena mi libero provo, grazie mille!

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Lettura dati database qlite
« Risposta #8 il: 16 Aprile 2013, 23:49:08 CEST »
0
Le nozioni minime necessarie per lavorare con un db in locale sono:

- Nozioni base sql (create, select, join, drop ecc)
- Inizializzazione di un DB sqlite
- Apertura e Chiusura
- Concetto Cursor
- Operazioni CRUD (Create - Read - Update - Delete)

Per le nozioni base di sql potete fare riferimento alla sintassi online di sqlite: http://www.sqlite.org/syntaxdiagrams.html
Inizializzare un DB significa "preparare" un contenitore interno all'app (nelle sue cartelle) chiamato db (creandolo al primo avvio o copiandolo da assets o dall'esterno).
Dobbiamo aprire il DB (in sola lettura O lettura e scrittura) per poter fare qualunque operazione con i dati in esso contenuti.
Cursor è molto semplicisticamente un contenitore di dati che sono stati "estratti" da una o più tabelle (ad esempio il contenuto del risultato di una select)
Per le operazioni CRUD ti rimando a questo ottimo tutorial: http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

Senza queste nozioni è molto complicato capire come interagire con un db sqlite dalla propria app.
Spero sia utile a chiarire i dubbi.

Post unito: 17 Aprile 2013, 00:12:30 CEST
E poi...

Codice (Java): [Seleziona]
// Si presume che db.mDb = SQLiteOpenHelper.getReadableDatabase();
Cursor cursor = db.mDb.rawQuery("SELECT nome, cognome FROM anagrafica WHERE nome =" +  textbox.getText().toString(), null);  

 while(cursor.moveToNext())
 {
       String nome = cursor.getString(cursor.getColumnIndex("nome")); //seleziono nome
       String cognome = cursor.getString(cursor.getColumnIndex("cognome")); //seleziono cognome
 }

 cursor.close();  //chiusura del cursor                    
 ck.close();        //chiusura del cursor
 db.close();       //chiusura del db

Questo non può funzionare, mi spiego...

Codice (Java): [Seleziona]
Cursor cursor = db.mDb.rawQuery("SELECT nome, cognome FROM anagrafica WHERE nome =" +  textbox.getText().toString(), null);  
Questa è la select:

SELECT nome, cognome FROM anagrafica WHERE nome = Giorgio
Giorgio è un esempio naturalmente

L'istruzione restituirà un elenco di 2 colonne (nome*** + cognome, aventi id_colonna 0*** - 1) di tutte le persone il cui nome è Giorgio:

Codice (Java): [Seleziona]
String nome = cursor.getString(cursor.getColumnIndex("nome")); //seleziono nome
Naturalmete nome dovrebbe essere sempre Giorgio dopo la select di cui sopra ma questa riga è sbagliata:

nome = cursor.ottieni_la_srtringa( cursor.ottieni_l'id_nuerico_della_colonna_chiamata("nome");
cursor.getColumnIndex("nome") sarà sempre uguale a 0***
quindi nome conterrà sempre il valore 0 e non Giorgio.

Spero di essermi spiegato.  ;-)
« Ultima modifica: 19 Aprile 2013, 09:54:23 CEST da Eu4ia »
Se ti sono stato utile premi "Thanks" ;-)