Autore Topic: Semplice interrogazione di un database SQLite  (Letto 565 volte)

Offline Damien

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lenovo ZUK Z1
  • Sistema operativo:
    Windows 10
Semplice interrogazione di un database SQLite
« il: 27 Luglio 2015, 15:22:05 CEST »
0
Buonasera a tutti, è la prima volta che gestisco un database. Mi sono informato su internet e ho capito cos'è e come funziona. Ora io avrei bisogno di ottenere un array di tutte le righe che contengono lo stesso numero in una colonna. Ho letto qua e la e mi sembra di aver capito che serve la funzione query, ma non capisco come viene utilizzata.

Io ho una tabella simile a questa:

+---+--------+-----+
 |ID|numero|nome|
+---+--------+-----+
 |0  |    1     |mario|
+---+--------+-----+
 |1  |   2      | caio  |
+---+--------+-----+
 |2  |   1      | pluto|
+---+--------+-----+
 |3  |   3      |pippo|
+---+--------+-----+

vorrei capire come si inserisce il metodo secondo cui io passo l'intero (per esempio 1) e mi restituisce un array di valori in questo caso {mario,pluto}
Se ti sono stato d'aiuto premi il tasto THANKS :)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Semplice interrogazione di un database SQLite
« Risposta #1 il: 27 Luglio 2015, 16:22:22 CEST »
+1
Visto che non hai le basi dei database, parto da lontano: i database del tipo di SQLite si interrogano facendo le "query". Una "query" è in pratica una ricerca, e si scrive in linguaggio SQL (Structured Query Language).

Se nel tuo caso vuoi ricevere un array di nomi che hanno numero =1, la query sarà fatta così: SELECT nome FROM nome_tabella WHERE numero=1

In maiuscolo ho messo le "keyword" del linguaggio SQL.
"nome" è la colonna che vuoi ricevere, avresti potuto mettere "*" per riceverle tutte
"nome_tabella" è la tabella su cui fare la ricerca
"numero=1" è la condizione che la riga deve soddisfare per poter essere risultato della ricerca


Detto questo, secondo me ti conviene studiare un po' le basi dell'SQL e fare qualche prova di query direttamente in un database manager su PC, perchè farlo in un'app senza vedere immediatamente cosa appare, è veramente molto difficile.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Damien

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lenovo ZUK Z1
  • Sistema operativo:
    Windows 10
Re:Semplice interrogazione di un database SQLite
« Risposta #2 il: 27 Luglio 2015, 16:40:11 CEST »
0
grazie mille bradipao, veloce e preciso come sempre :D


EDIT:

Ho implementato il codice come ho visto in un esempio su internet, ma purtroppo ho visto che l'app va in crash, riporto il codice:

Codice (Java): [Seleziona]
public ArrayList<String> getListElemento(int lista) {

        ArrayList<String> elementoList = new ArrayList<>();

        String selectQuery = "SELECT "+KEY_NOME+" FROM "+TABLE_LISTA+" WHERE "+KEY_LISTA+"="+lista; //codice suggerito da bradipao

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
       
        if (cursor.moveToFirst()) {
            do {
                elementoList.add(cursor.getString(2)); //l'app va in crash a questa riga
            } while (cursor.moveToNext());
        }
        cursor.close();
       
        return elementoList;

    }
« Ultima modifica: 27 Luglio 2015, 20:05:53 CEST da Damien »
Se ti sono stato d'aiuto premi il tasto THANKS :)

Offline Damien

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lenovo ZUK Z1
  • Sistema operativo:
    Windows 10
Re:Semplice interrogazione di un database SQLite
« Risposta #3 il: 09 Agosto 2015, 19:53:36 CEST »
0
up
Se ti sono stato d'aiuto premi il tasto THANKS :)

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Semplice interrogazione di un database SQLite
« Risposta #4 il: 09 Agosto 2015, 20:58:54 CEST »
+1
Ciao cambierei metodo di approccio , ti dico come faccio io ,
innanzitutto tu hai una certa tabella diciamo si chiama " Cliente " contenete le colonne "id_cliente", "numero_cliente","nome_cliente",
quindi mi creo subito un oggetto java Cliente.java
Codice (Java): [Seleziona]
public class Cliente {
    private int id_cliente;
    private String nomeCliente;
    private String numeroCliente;
    public Cliente(String nomeCliente,String numeroCliente){
        this.nomeCliente = nomeCliente;
        this.numeroCliente=numeroCliente;
    }
    public void setNumeroCliente(String numeroCliente) {
        this.numeroCliente = numeroCliente;
    }

    public void setNomeCliente(String nomeCliente) {
        this.nomeCliente = nomeCliente;
    }
   public void setId_cliente(int id_cliente) {
        this.id_cliente = id_cliente;
    }
   public int getId_cliente() {
        return id_cliente;
    }

    public String getNomeCliente() {
        return nomeCliente;
    }

    public String getNumeroCliente() {
        return numeroCliente;
    }
}

a questo punto torniamo al nostro Database.class
e ipotiziamo che vogliamo avere un metodo che restituisce una lista di oggi "Cliente"

allora farei cosi

Codice (Java): [Seleziona]
public List<Cliente> getAllClienti() {
        List<Cliente> tags = new ArrayList<Cliente>();
        String selectQuery = "SELECT  * FROM " + TABLE_CLIENTE+ " ;
        Log.e(LOG, selectQuery);
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.rawQuery(selectQuery, null);
        if (c.moveToFirst()) {
            do {
                Cliente t = new Cliente(
                c.getInt((c.getColumnIndex(KEY_ID_CLIENTE))),
                c.getString(c.getColumnIndex(KEY_RAGIONE_SOCIALE))
                c.getString(c.getColumnIndex(KEY_NUMERO_CLIENTE))   );
                tags.add(t);
            } while (c.moveToNext());
        }
        return tags;
    }

a questo punto come usare il tutto ? ipotiziamo che siamo nel main
Main.java
Codice (Java): [Seleziona]
Database db = new Database(this);
List<Cliente> clientes = new ArrayList<Cliente>();
clientes = db.getAllCliente();

saluti  :-P
« Ultima modifica: 09 Agosto 2015, 21:01:17 CEST da pietroconti89 »

Offline Damien

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lenovo ZUK Z1
  • Sistema operativo:
    Windows 10
Re:Semplice interrogazione di un database SQLite
« Risposta #5 il: 10 Agosto 2015, 19:14:01 CEST »
0
Ti ringrazio pietro conti per la risposta, tuttavia faccio già in questo modo, e quello che ho postato inizialmente è solo la parte di codice interessata al problema. Rimanendo sul tuo esempio, supponiamo adesso che voglia avere un arrayList di tutti i clienti che si chiamano mario, come faresti tu?
Se ti sono stato d'aiuto premi il tasto THANKS :)

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Semplice interrogazione di un database SQLite
« Risposta #6 il: 10 Agosto 2015, 19:20:33 CEST »
+1
molto semplice, implementerei un nuovo metodo nel file Database.java che invece che restituire il completo dei cliente restituisce solo secondo il prametro nome come segue
Codice (Java): [Seleziona]
public List<Cliente> getAllClientiByName(String ragioneSociale) {
        List<Cliente> tags = new ArrayList<Cliente>();
        String selectQuery = "SELECT  * FROM " + TABLE_CLIENTE+ " WHERE "
                + KEY_RAGIONE_SOCIALE + " = '" + ragioneSociale+"'";
        Log.e(LOG, selectQuery);
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.rawQuery(selectQuery, null);
        if (c.moveToFirst()) {
            do {
                Cliente t = new Cliente(
                c.getInt((c.getColumnIndex(KEY_ID_CLIENTE))),
                c.getString(c.getColumnIndex(KEY_RAGIONE_SOCIALE))
                c.getString(c.getColumnIndex(KEY_NUMERO_CLIENTE))   );
                tags.add(t);
            } while (c.moveToNext());
        }
        return tags;
    }

a questo punto nel mio solito main.java
mi basta fare....
Codice (Java): [Seleziona]
Database db = new Database(this);
List<Cliente> clientes = new ArrayList<Cliente>();
clientes=db.getAllClientiByName("MARIO");

cosi facendo ho una Lista di oggetti mario Se disponibile  ;-)

Post unito: 10 Agosto 2015, 19:25:42 CEST
avevo scritto una mezza cappellata , ore è corretto  :-P
« Ultima modifica: 10 Agosto 2015, 19:25:42 CEST da pietroconti89, Reason: Merged DoublePost »

Offline Damien

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lenovo ZUK Z1
  • Sistema operativo:
    Windows 10
Re:Semplice interrogazione di un database SQLite
« Risposta #7 il: 11 Agosto 2015, 16:04:35 CEST »
0
Grandissimo! Proprio questo mi interessava! Sei stato utilissimo, grazie  :D
Se ti sono stato d'aiuto premi il tasto THANKS :)

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Semplice interrogazione di un database SQLite
« Risposta #8 il: 11 Agosto 2015, 16:18:50 CEST »
0
 ;-) good job