Autore Topic: Problema query  (Letto 890 volte)

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Problema query
« il: 18 Ottobre 2010, 17:05:37 CEST »
0
Ho impostato una query nella classe MyDatabase della mia app in questo modo:
Codice (Java): [Seleziona]
 private static final String QUERY = " Select _id, gol, time from partite ";
    public void showGolTime(MyDatabase _db){
        this.mDb.query(MyDatabase.Match.MATCH_TABLE, null, QUERY, null, null, null, null);
    }

La vado poi a visualizzare in questo modo:
Codice (Java): [Seleziona]
 qButton.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
                       
                Cursor cursor=db.fetchProducts();
                db.rawQuery("SELECT _id, gol, time FROM partite", null);
                cursor.moveToFirst();                    
               
                queryTv.append(cursor.getString(0));
                     
                }
        }      

);
    }

Non mi da errore ma mi mostra nella textview un numero insensato sempre composto da una sola cifra??? perchè?
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema query
« Risposta #1 il: 18 Ottobre 2010, 21:20:36 CEST »
+1
Devi pensare al cursore che ottieni come a una tabella in cui le colonne sono i dati che hai indicato nella clausola di SELECT e le righe sono appunto le varie n-uple dei dati.
Con il codice che hai scritto tu stampi a video solo la prima colonna della prima riga che è l'id del primo record.
Se ti serve stampare altro devi ciclare sul cursore.
Codice (Java): [Seleziona]
qButton.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
                       
                Cursor cursor=null;
                               
                                try{
                                        cursor = db.query("partite", new String[]{ "_id", "gol", "time"}, null, null, null, null, null);
                                        cursor.moveToFirst();                    
                                       
                                        do {
                                                queryTv.append(cursor.getString(0) + "\t" + cursor.getString(1) + "\t" + cursor.getString(2) + "\n" );
                                        }
                                        while ( cursor.moveToNext() );
                                       
                                }catch(Exception e){
                                        Log.e("Errore!", e.getMessage());
                                }finally{
                               
                                        if(cursor!=null){
                                       
                                                cursor.close();
                                       
                                        }
                                       
                                }
                       
        }      

);

Non ho capito a cosa serve showGolTime che effettivamente è errato e a cosa serve Cursor cursor=db.fetchProducts();



Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema query
« Risposta #2 il: 18 Ottobre 2010, 21:45:19 CEST »
0
Grazie per la spiegazione, è stata davvero molto esauriente, solo che non ho capito ancora una cosa: mi dice che il metodo query che hai richiamato sul db con db.query è indefinito nella classe MyDatabase:
come lo devo definire?? :-\
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema query
« Risposta #3 il: 18 Ottobre 2010, 22:37:27 CEST »
0
Grazie per la spiegazione, è stata davvero molto esauriente, solo che non ho capito ancora una cosa: mi dice che il metodo query che hai richiamato sul db con db.query è indefinito nella classe MyDatabase:
come lo devo definire?? :-\

La query devi farla su un oggetto SQLiteDatabase | Android Developers , non so di che tipo via il tuo oggetto "db".

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema query
« Risposta #4 il: 19 Ottobre 2010, 00:28:50 CEST »
0
Si ok la devo fare sul mio db sqlite, ma come devo definire il metodo per la query all'interno della classe MyDatabase (che è la classe che gestisce il mio db dell'app)?
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema query
« Risposta #5 il: 19 Ottobre 2010, 11:37:27 CEST »
0
Si ok la devo fare sul mio db sqlite, ma come devo definire il metodo per la query all'interno della classe MyDatabase (che è la classe che gestisce il mio db dell'app)?

Abbi pazienza, ma non conoscendo questa classe MyDatabase come faccio/facciamo a saperlo?

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema query
« Risposta #6 il: 19 Ottobre 2010, 14:24:04 CEST »
0
hai ragione..eccola:
Codice (Java): [Seleziona]
package com.android;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class MyDatabase {  

        SQLiteDatabase mDb;
    DbHelper mDbHelper;
    Context mContext;
    private static final String DB_NAME="seasonDb";//nome del db
    private static final int DB_VERSION=1; //numero di versione del nostro db
    Cursor c;
   
    public MyDatabase(Context ctx){
            mContext=ctx;
            mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);   //quando istanziamo questa classe, istanziamo anche l'helper (vedi sotto)    
    }
   
    public void open(){  //il database su cui agiamo è leggibile/scrivibile
            mDb=mDbHelper.getWritableDatabase();
           
    }
   
    public void close(){ //chiudiamo il database su cui agiamo
            mDb.close();
    }
   
   
    //i seguenti 2 metodi servono per la lettura/scrittura del db. aggiungete e modificate a discrezione
   // consiglio:si potrebbe creare una classe Prodotto, i quali oggetti verrebbero passati come parametri dei seguenti metodi, rispettivamente ritornati. Lacio a voi il divertimento

   
    public void insertMatch(String assist,String time,String gol,String voto, int day, String vs, int mese, int anno, String girone, String comp){ //metodo per inserire i dati
            ContentValues cv=new ContentValues();
            cv.put(Match.ASSIST, assist);
            cv.put(Match.GOL, gol);
            cv.put(Match.MINUTI_GIOCATI, time);
            cv.put(Match.DAY, day);
            cv.put(Match.AVVERSARIO, vs);
            cv.put(Match.MESE, mese);
            cv.put(Match.ANNO, anno);
            cv.put(Match.GIRONE, girone);
            cv.put(Match.COMPETIZIONE, comp);
            //cv.put(Match.YELLOW, yellow);
            //cv.put(Match.RED, red);
            cv.put(Match.VOTO, voto);
            mDb.insert(Match.MATCH_TABLE, null, cv);
    }
   
 
   
    public Cursor fetchProducts(){ //metodo per fare la query di tutti i dati
            return mDb.query(Match.MATCH_TABLE, null,null,null,null,null,null);              
    }

 
   
    static class Match {  // i metadati della tabella, accessibili ovunque
        static final String MATCH_TABLE = "partite";
        static final String ID = "_id";
        static final String ASSIST = "assist";
        static final String GOL = "gol";
        static final String MINUTI_GIOCATI = "time";
        static final String VOTO= "voto";
        static final String DAY= "day";
        static final String MESE= "mese";
        static final String ANNO= "anno";
        static final String GIRONE= "girone";
        static final String COMPETIZIONE= "competizione";
        static final String AVVERSARIO= "avversario";
       // static final String YELLOW= "giallo";
        //static final String RED= "red";
;

}
   
   
   
    private static final String MATCH_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  //codice sql di creazione della tabella
        + Match.MATCH_TABLE + " ("
        + Match.ID+ " integer primary key autoincrement, "
        + Match.ASSIST + " text not null, "
        + Match.MINUTI_GIOCATI + " text not null, "
        + Match.GOL + " text not null, "
        + Match.DAY + " date, "
        + Match.MESE + " date, "
        + Match.ANNO + " date, "
        + Match.AVVERSARIO + " text, "
        + Match.GIRONE + " text, "
        + Match.COMPETIZIONE + " text, "
        + Match.VOTO + " text);";
       // + Match.YELLOW + " text not null, "
       // + Match.RED + " integer not null);";
   
    public void deleteAll(){
        mDb.delete(MyDatabase.Match.MATCH_TABLE, null, null);
     }
   
    public Cursor query(MyDatabase _db){
        return c = mDb.query("partite", new String[]{ "_id", "gol", "time"}, null, null, null, null, null);
    }
    private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db

            public DbHelper(Context context, String name, CursorFactory factory,int version) {
                    super(context, name, factory, version);
            }

            @Override
            public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella
                  _db.execSQL(MATCH_TABLE_CREATE);
            }

            @Override
            public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
                    //qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app, il db cambia numero di versione

            }

    }
        public Cursor rawQuery(String string, Object object) {
                // TODO Auto-generated method stub
                return mDb.rawQuery("SELECT avversario FROM partite", null);
        }
           

}
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema query
« Risposta #7 il: 20 Ottobre 2010, 15:16:19 CEST »
0
Nessuno riesce ad aiutarmi?? :'(
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema query
« Risposta #8 il: 20 Ottobre 2010, 16:17:28 CEST »
+1
La risposta dovrebbe essere molto intuitiva, perché credo che tu debba semplicemente wrappare il metodo query che ti ha proposto Ricky con quello del db:

Codice (Java): [Seleziona]
cursor = db.query("partite", new String[]{ "_id", "gol", "time"}, null, null, null, null, null);
Il metodo nella tua class db dovrà essere di questo tipo

Codice (Java): [Seleziona]
public Cursor query(String table, String[] columns, String selection,
                    String[] selectionArgs, String groupBy, String having, String orderBy) {

        return c = mDb.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);

    }

p.s.: bisogna fare uno sforzo in più.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema query
« Risposta #9 il: 20 Ottobre 2010, 19:41:59 CEST »
0
Ti ringrazio infinitamente, adesso ho un metodo per fare le query..ed ora che lo vedo in effetti è intuitivo, solo che prima proprio non mi veniva..che ci posso fare sono di testa dura..
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema query
« Risposta #10 il: 20 Ottobre 2010, 20:28:29 CEST »
0
p.s.: bisogna fare uno sforzo in più.

è per questo che non ho più risposto. Per molti è più facile aspettare che qualcuno gli risolva i problemi piuttosto di sbatterci un po' la testa. Purtroppo però facendo in questo modo non si impara mai...

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema query
« Risposta #11 il: 20 Ottobre 2010, 20:37:50 CEST »
0
Capisco il vostro pensiero, però io sono alle prime armi e magari non mi viene tutto cosi spontaneo, magari vedendo la soluzione riesco a elaborarla meglio poi da solo ma partendo da carta bianca non riesco a buttar giu niente, è per questo che mi rivolgo a voi; il forum serve anche a questo o no??
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema query
« Risposta #12 il: 21 Ottobre 2010, 09:13:51 CEST »
0
Potrebbe servire pure a questo, è vero.
A patto che poi la mente si apra. ^_^
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/