Autore Topic: Accesso a database  (Letto 2951 volte)

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Accesso a database
« il: 08 Luglio 2012, 16:40:45 CEST »
0
Salve, devo inserire in un applicazione un database sqlite, importando un file .sqlite dall'esterno.
Il file deve esser importato al momento dell'installazione e non subirà più modifiche (solo select)
ho letto tutte le 8 pagine d questa discussione [medio] Creazione e utilizzo di un database SQLite - Android Developers Italia ma ho solo trovato domande, e non risposte.
Quindi come faccio a impostare il progetto in modo che all'installazione, importi il database in data/data/mio.package ???
se mi manca questo passo, non posso far tutte le altre prove sul database. Grazie!!!
p.s. alla modifica del database (circa 1 volta l'anno) ho intenzione di caricare nuovamente l'applicazione sul market, così da modificarlo in una sola volta

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Accesso a database
« Risposta #1 il: 09 Luglio 2012, 12:50:42 CEST »
0
All'apertura dell'app puoi verificare se il database esiste altrimenti lo importi.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Accesso a database
« Risposta #2 il: 09 Luglio 2012, 16:43:35 CEST »
0
si ma  per andar a scrivere  in data/data etc etc non ho bisogo dei permessi di root?

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Accesso a database
« Risposta #3 il: 09 Luglio 2012, 17:29:38 CEST »
0
non saprei.
Io creerei un database base allo startup dell'applicazione e preleverei dall'esterno soltanto il dato che mi serve aggiornare sul database.
Così non devi importarti nulla.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Accesso a database
« Risposta #4 il: 09 Luglio 2012, 18:43:33 CEST »
0
uhm si, si potrebbe fare, ma se dev metter tutti  i datiinun file (per esempio /drawable/file.txt) e ad ogni avvio dell'app devo copiare tutti questi dati nel database, e poi contrlllare su internet se il database ha subito moodifiche, e quindi aggiornare tutti  campi sia nel database che nel file, mi sembra una cosa un po` ridondante. sarebbe ottimoimportare il database  a al prim avvio, e poi con due semlici if, contrllare se e' gia' presente il database, e poi controllare la versione, e soloin tal caso scaricare  ilfile aggioornato.
scusate il messaggo sgrammaticato, solo dal tablet con una tastiera troppo piccola..

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Accesso a database
« Risposta #5 il: 09 Luglio 2012, 19:25:10 CEST »
0
Ma in realtà se hai un database con tutti i dati base, ti basta una tabella dove indichi la versione del db.
All'avvio non fai altro che controllare la tabellina della versione del db , se la versione è diversa, ti peschi un file txt che contiene il dump degli aggiornamenti da fare altrimenti il database  è in aggiornato.
Spero di essermi spiegato bene  :-)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Accesso a database
« Risposta #6 il: 10 Luglio 2012, 00:44:07 CEST »
0
si ma  per andar a scrivere  in data/data etc etc non ho bisogo dei permessi di root?

No, qualsiasi app può scrivere e leggere nella propria directory, non può leggere i dati di un'altra app.

Per il database SQLite puoi usare questa classe, ti aiuta a creare il DB e a gestire gli aggiornamenti:

SQLiteOpenHelper | Android Developers
adb logcat | tee /tmp/logcat | grep TAG

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Accesso a database
« Risposta #7 il: 10 Luglio 2012, 09:02:57 CEST »
0
No, qualsiasi app può scrivere e leggere nella propria directory, non può leggere i dati di un'altra app.
Ciao Iceweasel,
Ma nel caso in oggetto(credo di aver capito  :-P)che l'applicazione debba andare a scrivere nella sua directory.
Lui vuol prendere un database da remoto e copiarlo nella sua directory dell'app attiva.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Accesso a database
« Risposta #8 il: 10 Luglio 2012, 15:33:03 CEST »
0
La negazione è riferita ad essere root, non serve esserlo.

Se una applicazione vuole scrivere nella propria directory può farlo, compreso copiare un database SQLite esterno nella directory interna, l'importante è che sia compatibile con la versione di SQLite di Android in uso e che abbia i meta dati creati correttamente (deve avere la tabella "android_metadata", inizializzata con i dati giusti).

Almeno è quello che ho capito io ?
adb logcat | tee /tmp/logcat | grep TAG

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Accesso a database
« Risposta #9 il: 10 Luglio 2012, 15:50:38 CEST »
0
A questo punto basta che prendi il tuo db lo inserisci nella cartella data\ecc... e vedi se riesci ad usarlo.
Se riesci a connetterti non vedo il problema di copiare brutalmente il database nella cartella apposita dell'app.
Poi puoi prevedere l'utilizzo di script per gli aggiornamenti.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Accesso a database
« Risposta #10 il: 10 Luglio 2012, 21:23:27 CEST »
0
e come gli indico la directory data/data etc etc dato che sarà esterna al progetto?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Accesso a database
« Risposta #11 il: 11 Luglio 2012, 02:18:23 CEST »
0
Scusa allora non capisco ? ? ?

Per me la directory "/data/data/<packagename>" si trova nel file system di Android ed è gestita dal framework di Android e dal applicativo stesso. I database dell'applicativo si trovano nella directory "/data/data/<packagename>/databases". Quindi parli di qualcosa dentro che è fuori ?



adb logcat | tee /tmp/logcat | grep TAG

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Accesso a database
« Risposta #12 il: 11 Luglio 2012, 08:09:32 CEST »
0
ricapitolando.
Io ho un file .sqlite, contenente il backup del database (al quale devo aggiungere la tabella con i dati relativi ad android, che per il momento manca)
il database deve essere disponibile offline, e contiene un centinaio di row
il database non subisce frequenti insert o update, solo (circa) 1 volta l'anno.
Quindi, io devo inserire questo file nella mia applicazione, e poter accedere tutte le volte che voglio, indipendentemente dalla rete. Inoltre devo poter fare un controllo di versione online, e se il file online ha una versione più aggiornata, lo devo scaricare, e sostituire al prcedente.
ora è tutto più chiaro?
tutte le guide che ho trovato mi dicevano solo come creare il database all'interno del programma, non come importarlo

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Accesso a database
« Risposta #13 il: 11 Luglio 2012, 14:27:02 CEST »
0
Hanno ragione le guide è meglio creare un database. Se non conosci bene Android ti consiglio di usare la classe "SQLiteOpenHelper," se sei un esperto di Android ti consiglio di usare la classe "SQLiteOpenHelper" :-)

Se proprio vuoi importare un database SQLite creato esternamente, come detto in precedenza questo database deve essere compatibile con la versione di SQLite usata dalla versione di Android e deve avere i meta dati opportuni.

Da quello che ho capito, la prima versione del file del database deve stare nel package, quindi il luogo migliore è nella directory "assets/" o in una sua sotto directory. Nel codice ci deve essere un test se il database è presente, in caso negativo devi copiare il file del database dalla directory "assets/" alla directory "/data/data/<packagename>/databases/". Nel l'uso normale il database esiste, basta aprirlo e usarlo.

Sempre da quello che ho capito, con un sistema che vuoi tu devi controllore online la versione del database, se diversa da quella in uso con un thread ti scarichi in un file temporaneo il nuovo database, blocchi tutti gli accessi e chiudi il database corrente, copi il file temporaneo sovrascrivendo il vecchio database, cancelli il file temporaneo. A questo punto il database è pronto ad essere utilizzato normarmente.

Come vedi non è semplice e ci sono dei passaggi delicati.



« Ultima modifica: 11 Luglio 2012, 17:18:15 CEST da iceweasel »
adb logcat | tee /tmp/logcat | grep TAG

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Accesso a database
« Risposta #14 il: 11 Luglio 2012, 16:00:55 CEST »
0
Iceweasel è stato molto chiaro. :D
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .