Autore Topic: Best practice per la gestione dei dati su SQLITE  (Letto 720 volte)

Offline andrologo

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG 540GT - LG Optimus ONE - ePAD
  • Sistema operativo:
    L/W
Best practice per la gestione dei dati su SQLITE
« il: 20 Maggio 2011, 23:21:07 CEST »
0
Ciao a tutti, sto iniziando a studiare la piattaforma Android e lo sviluppo sulla stessa, volevo chiedere ai più esperti un consiglio sul trattamento dei dati su SQLITE.
Da quanto appreso è opportuno creare una classe che estende SQLiteOpenHelper.
In uno scenario dove il db (come normale che sia) ha più tabelle, cosa mi consigliate di fare?

Il ciclo di vita del database vede:
- creazione (metodo onCreate(SQLiteDatabase db))
- aggiornamento (onUpgrade(SQLiteDatabase db, int vecchiaVersione, int nuovaVersione))

Il loro funzionamento lo conosco e non ho bisogno di particolari "dritte".
Nei vari esempi trovati, vedo che si predilige, forse per semplicità, l'opzione di cablare il codice SQL all'interno del codice.
Per esperienza non amo questo modo di fare, potete indicarmi qualche tipo di approccio?
Pensavo ad esempio di archiviare le query su un file (o più file) esterno e di leggerne il codice da li. Pensate sia una buona idea? è sconsigliato?

Un'altra cosa che volevo fare per utilizzare quanto messo a disposizione delle api android è quella di memorizzare le query nelle risorse come stringa, non lo ho fatto in quanto non so esattamente come si comporta il sistema in presenza (come nel mio caso) di una gestione multilingua delle stringhe.
Nel mio caso ho values-it e values-en, nel caso fosse opportuno usare questa seconda opzione, dove è preferibile metterle?

Un'altro consiglio che gradirei ricevere è come progettare le tabelle per facilitare l'estendibilità del database, so che detta cosi può far sorridere un pò, tuttavia i più esperti potrebbero avere consigli o indicarmi qualche fonte sul web che indica le best practice da seguire.

Grazie per l'aiuto

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:Best practice per la gestione dei dati su SQLITE
« Risposta #1 il: 23 Maggio 2011, 11:24:19 CEST »
0
Nei vari esempi trovati, vedo che si predilige, forse per semplicità, l'opzione di cablare il codice SQL all'interno del codice.
Per esperienza non amo questo modo di fare, potete indicarmi qualche tipo di approccio?
Pensavo ad esempio di archiviare le query su un file (o più file) esterno e di leggerne il codice da li. Pensate sia una buona idea? è sconsigliato?

Sebbene sia di più complessa realizzazione, mettendo le query su file rischi la sql injection.

Un'altra cosa che volevo fare per utilizzare quanto messo a disposizione delle api android è quella di memorizzare le query nelle risorse come stringa, non lo ho fatto in quanto non so esattamente come si comporta il sistema in presenza (come nel mio caso) di una gestione multilingua delle stringhe.
Nel mio caso ho values-it e values-en, nel caso fosse opportuno usare questa seconda opzione, dove è preferibile metterle?
Ti basta che metti le stringhe comuni a tutti i locale, solamente nel main locale, così con qualunque locale vedi sempre quella stringa.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline andrologo

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG 540GT - LG Optimus ONE - ePAD
  • Sistema operativo:
    L/W
Re:Best practice per la gestione dei dati su SQLITE
« Risposta #2 il: 23 Maggio 2011, 18:04:27 CEST »
0
Grazie per la risposta, la sql injection si bypassa utilizzando un'opportuno sistema di creazione delle stringhe finali di creazione, selezione ecc..
Per quanto riguarda il discorso del locale, io ho creata una cartella values, e attraverso i tool di eclipse ho creato il file sql.txt.
Al suo interno sto mettendo tutte le stringhe che raccolgono codice SQL, ovviamente per maggiore pulizia delle risorse sto utilizzando il prefisso SQL_...

Una cosa che trovo limitante è il fatto che non posso personalizzare il tipo di risorsa, sarebbe stato carino (anche se formalmente non corretto), aver avuto: R.sql.MyQuery al posto della situazione attuale per la quale sono costretto a fare R.string.SQL_MyQuery.
Usare string mi disturba perchè si mischiano le stringhe al SQL.

Grazie.
M

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Best practice per la gestione dei dati su SQLITE
« Risposta #3 il: 23 Maggio 2011, 18:15:33 CEST »
0
A me l'unica cosa che non mi piace della tua soluzione è che non puoi usare delle costanti per i nomi delle tabelle o dei campi.

Concordo sul fatto che avere tutto il codice di creazione in una classe non è molto pulito, ma se ad esempio fai come descritto dell'ottimo di tutorial di Qlimax in questo modo:
Codice (Java): [Seleziona]
class ProductsMetaData {
        static final String PRODUCTS_TABLE = "products";
        static final String ID = "_id";
        static final String PRODUCT_NAME_KEY = "name";
        static final String PRODUCT_PRICE_KEY = "price";
        static final String PRODUCTS_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "
                + PRODUCTS_TABLE + " ("
                + ID+ " integer primary key autoincrement, "
                + PRODUCT_NAME_KEY + " text not null, "
                + PRODUCT_PRICE_KEY + " text not null);";
}

hai una buona separazione del codice e puoi usufruire delle costanti quando maneggi le query.

Offline andrologo

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG 540GT - LG Optimus ONE - ePAD
  • Sistema operativo:
    L/W
Re:Best practice per la gestione dei dati su SQLITE
« Risposta #4 il: 23 Maggio 2011, 22:53:35 CEST »
0
Si Ricky effettivamente avevo trovato degli esempi che mettevano in evidenza i vantaggi di avere i nomi delle colonne parametrizzati in variabili statiche, effettivamente l'ho subito ben giudicato.
In ogni modo qui interviene molto il gusto personale, voglio provare ad utilizzare entrambe i metodi per vedere come mi trovo + comodo.
Molto probabilmente riveste un ruolo importante il metodo con la quale si eseguono le query, se utilizzando codice SQL o gli statement messi a disposizione da android.

Grazi per i consigli :)
M