Autore Topic: Arraylist contenenti tabelle di numero indefinito  (Letto 522 volte)

Offline think_over

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows vista
Arraylist contenenti tabelle di numero indefinito
« il: 04 Agosto 2013, 21:20:13 CEST »
0
Salve a tutti.  Vi posto subito quale è il problema.   Sto cercando di realizzare un gestionale che gestisce una lista della spesa.  La mia intenzione nella realizzazione del progetto è quella di creare un solo database con piu tabelle ma quest'ultime di numero indefinito indicizzate con degli array o arraylist (preferibile) in maniera che l'utente possa crearne molteplici di liste senza che vi sia un limite numerico. Ho tentato di dare vita a degli arraylist con il nome della tabella in modo che possa poi contenere un numero di tabelle indefinite. il progetto è ancora da completare ma l'errore si presenta nel tipo static public... e nel field delle righe dove viene citata la tabella TABLE_RECORD.  "RECORD_TABLE cannot be resolved or is not a field"   Non so se è possibile fare tabelle di numero indefinito ma se possibile come fare?   :-(
Allego il solo file Mydatabase.java            SDK Progetto 7

Codice (Java): [Seleziona]
package it.project.free;


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

import java.util.*;



public class MyDatabase {
        SQLiteDatabase mDb;
        DbHelper mDbHelper;
        Context mContext;
        private static final String DB_NAME="DBaselista"; //nome del db
        private static final int DB_VERSION=1; //numero di versione del nostro db
       
        public int realnumbertab = 0;
        static int n = 0;
        static String nometabella = "Lista della spesa";
       
       
    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)
                        ArrayList RECORD_TABLE = new ArrayList();
                        RECORD_TABLE.add(nometabella);       
        }
       
    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. Lascio a voi il divertimento
   
   
    public void InserimentoRecord(String nomeProdotto, int nomeQuantita, String nomeStato){ //metodo per inserire i dati
                ContentValues cv=new ContentValues();
                cv.put(RecordMData.PRODOTTO, nomeProdotto);
                cv.put(RecordMData.QUANTITA, nomeQuantita);
                cv.put(RecordMData.STATO, nomeStato);
                mDb.insert(RecordMData.RECORD_TABLE[n], null, cv);
               
        }
   
    public Cursor prendiRecord(){ //metodo per fare la query di tutti i dati
        return mDb.query(RecordMData.RECORD_TABLE[n], null,null,null,null,null,null);
       
    }
   
    static class RecordMData {  // i metadati della tabella, accessibili ovunque       
                RECORD_TABLE[n] = nometabella;
                static final String ID = "_id";
                static final String PRODOTTO = "nomeProdotto";
                static final String QUANTITA = "nomeQuantita";
                static final String STATO = "nomeStato";
   
         
    }
   
   
   
   
    private static final String RECORD_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  //codice sql di creazione della tabella
                            + RecordMData.RECORD_TABLE[n] + " ("
                            + RecordMData.ID+ " integer primary key autoincrement, "
                            + RecordMData.PRODOTTO + " text not null, "
                            + RecordMData.QUANTITA + " integer not null,"
                            + RecordMData.STATO + " text not null);";
   
    private class DbHelper   extends SQLiteOpenHelper {
       
        public DbHelper(Context context, String DB_NAME, CursorFactory factory, int DB_VERSION)
        {
                super(context, DB_NAME, factory, DB_VERSION);
                }
   
   
                @Override
                public void onCreate(SQLiteDatabase _db) {
               
                // creare la Numerotabelle
               
                ArrayList RECORD_TABLE = new ArrayList();
               
               
                RECORD_TABLE.add(nometabella); 
                realnumbertab = RECORD_TABLE.size() + 1;
                n = RECORD_TABLE.size();
                               
                        _db.execSQL(RECORD_TABLE_CREATE);
               
               
             
               
               
                 InserimentoRecord("Pomodoro", 4, "A");
                 InserimentoRecord("Uova", 1, "A");
                 InserimentoRecord("Riso", 1, "A");
                 InserimentoRecord("Insalata", 1, "A");
                 InserimentoRecord("Sottoaceti", 2, "A"); //lol
                 InserimentoRecord("Mozzarella", 1, "A");
                 InserimentoRecord("Maionese", 2, "A");
                 
                }
               
               
               
                @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  
                                       
                        _db.execSQL("DROP TABLE RecordMdata.RECORD_TABLE[n]"); 
                }
                       
           
    }


}
« Ultima modifica: 04 Agosto 2013, 22:05:13 CEST da think_over »

Offline zorcraft

  • Utente junior
  • **
  • Post: 108
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    note
  • Play Store ID:
    zorcraft
Re:Arraylist contenenti tabelle di numero indefinito
« Risposta #1 il: 05 Agosto 2013, 12:08:26 CEST »
0
Non ho ben capito il problema ma se intendi fare una tabella per ogni lista secondo me sbagli l'approccio, al posto di creare una nuova tabella ogni volta inserisci un campo in piu che identifichi il tipo di elenco cosi tu richiami solo l'elenco che ti interessa dovresti avere una cosa cosi :

id     elenco       oggetto
0      elenco1     pane
1      elenco2     pesche
2      elenco1     pere


se tu richiami solo elenco1 ti uscira (pane e pere)

in sostanza hai piu tabelle in una

Offline crbin1

  • Utente junior
  • **
  • Post: 61
  • Respect: +6
    • labeltodo
    • Mostra profilo
    • Do Androids Dream of Electric Sheep?
  • Dispositivo Android:
    Galaxy Nexus
Re:Arraylist contenenti tabelle di numero indefinito
« Risposta #2 il: 05 Agosto 2013, 14:08:52 CEST »
0
Per avere infinite liste della spesa non devi creare infinite tabelle, te ne bastano 2.

Una tabella conterrà il nume e l'id delle tue liste della spesa, la seconda conterrà gli articoli.

TABELLA_LISTE
_id
nome_tabella
(*) puoi aggiungere anche uno stato o una data a ogni lista per esempio

TABELLA_ARTICOLI
_id
lista_id
prodotto
quantita
stato

Se tu vuoi per esempio due liste (lista1 e lista2 per semplicità), la prima con uova, pomodoro e mozzarella, la seconda con carne, pesce e pomodoro le tue tabelle satanno popolate come:

TABELLA_LISTE
1 ; lista1
2 ; lista2

TABELLA_ARTICOLI
1 ; 1 ; uovo ; 4 ; A
2 ; 1 ; pomodoro ; 2 ; A
3 ; 1 ; mozzarella ; 2 ; A
4 ; 2 ; carne ; 1 ; A
5 ; 2 ; insalata ; 1 ; A
6 ; 2 ; pomodoro ; 5 ; A

Per richiamare i prodotti della lista1 basta una query con lista_id = 1.


Offline think_over

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows vista
Re:Arraylist contenenti tabelle di numero indefinito
« Risposta #3 il: 05 Agosto 2013, 22:03:22 CEST »
0
Non ho ben capito il problema ma se intendi fare una tabella per ogni lista secondo me sbagli l'approccio, al posto di creare una nuova tabella ogni volta inserisci un campo in piu che identifichi il tipo di elenco cosi tu richiami solo l'elenco che ti interessa dovresti avere una cosa cosi :

id     elenco       oggetto
0      elenco1     pane
1      elenco2     pesche
2      elenco1     pere

se tu richiami solo elenco1 ti uscira (pane e pere)

in sostanza hai piu tabelle in una

Per avere infinite liste della spesa non devi creare infinite tabelle, te ne bastano 2.

Una tabella conterrà il nume e l'id delle tue liste della spesa, la seconda conterrà gli articoli.
........


 :-) Grazie moltissimo ad entrambi è vero ottima soluzione!  Mi sono intestardito e fatto prendere un po troppo la mano per gli array/arraylist (provengo da linguaggio visual basic..)