Autore Topic: Distruggere Database  (Letto 1370 volte)

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Distruggere Database
« il: 17 Novembre 2010, 12:55:50 CET »
0
Salve a tutti, ho un problema con la cancellazione e la distruzione  di un database.
All'inizio creavo un db con una tabella che aveva tra gli attributi questo: _id integer primary key autoincrement.
Fino a che inserivo e basta tutto ok, ma quando ho dovuto rimuovere gli elementi mi sono trovato il problema che questo valore non veniva mai azzerato.
Cancellavo le righe del db con questo comando: myDB.delete("nomeTabella", null,null);
Siccome avrei voluto con questa azione cancellare tutto e quindi anche azzerare il campo _id ho provato per prima cosa a togliere l'attributo autoincrement di _id ma nn cambiava lo schema della tabella. Poi ho provato a cancellare con questa funzione:myDB.execSQL("DROP TABLE IF EXISTS nomeTabella");.
Il problema ora e' che nn mi fa' piu' inserire nella tabella (il campo _id pero' nn risulta piu' autoincrement).

La mia richiesta e' dunque questa: e' possibile cancellare completamente il db creato? E se si in che modo.
Inoltre vorrei chiedervi se l'attributo _id, non piu' di tipo autoincrement, adesso vada specificato esplicitamente nella Insert.
Sperando di essere stato chiaro aspetto una vostra risposta. Ciao!!!
Risparmia l'acqua, bevi birra...

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Distruggere Database
« Risposta #1 il: 17 Novembre 2010, 13:45:35 CET »
0
dal terminale del tuo pc:

adb shell
rm /data/data/il.tuo.package/databases/*

Offline alex389

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    android 2.2
Re:Distruggere Database
« Risposta #2 il: 17 Novembre 2010, 13:48:31 CET »
0
Ciao, da neofita, proviamo a cercare una soluzione,
inanzitutto ti dico che nelle sql, se non è autoincrement un dato id, quando si va ad inserire, tramite una nuova query un record, questo controlla che non sia già inserito un record con quell'id.
Perciò se non si lascia una primary key autoincrement, questa non si incrementa.
A parer mio, ma parlo da neofita Android SDK, direi che se provi, "manualmente" a togliere tutti i record, dovrebbe funzionare.

Altrimenti, potresti fare la query, indicarli l'id, e metti per esempio 1000, un numero che sai benissimo non c'era come id nel database.

prova...
nel frattempo sono sicuro che qualcuno più esperto di me saprà aiutarti se già non la sta facendo mentre scrivo  ;-)

Ciauz !!!

Alex

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Distruggere Database
« Risposta #3 il: 17 Novembre 2010, 14:36:00 CET »
+1
Salve a tutti, ho un problema con la cancellazione e la distruzione  di un database.
All'inizio creavo un db con una tabella che aveva tra gli attributi questo: _id integer primary key autoincrement.
Fino a che inserivo e basta tutto ok, ma quando ho dovuto rimuovere gli elementi mi sono trovato il problema che questo valore non veniva mai azzerato.
Cancellavo le righe del db con questo comando: myDB.delete("nomeTabella", null,null);
Siccome avrei voluto con questa azione cancellare tutto e quindi anche azzerare il campo _id ho provato per prima cosa a togliere l'attributo autoincrement di _id ma nn cambiava lo schema della tabella. Poi ho provato a cancellare con questa funzione:myDB.execSQL("DROP TABLE IF EXISTS nomeTabella");.
Il problema ora e' che nn mi fa' piu' inserire nella tabella (il campo _id pero' nn risulta piu' autoincrement).

La mia richiesta e' dunque questa: e' possibile cancellare completamente il db creato? E se si in che modo.
Inoltre vorrei chiedervi se l'attributo _id, non piu' di tipo autoincrement, adesso vada specificato esplicitamente nella Insert.
Sperando di essere stato chiaro aspetto una vostra risposta. Ciao!!!

detta brevemente: se non metti la primary key autoincrement, devi specificare il valore nella insert(con un valore che non ci sia gia).
se invece vuoi tenere l'autoincrement e azzerarlo, se vai a questa pagina: Set start value for AUTOINCREMENT in SQLite - Stack Overflow
Citazione
One way to do it is to insert the first row specifying explicitly the row id you want to start with. SQLite will then insert row ids that are higher than the previous highest.
Quindi, si dovrebbe inserire manualmente un _id alla prima insert che fai dopo aver svuotato il database, dopodiche sembra che si arrangia da solo a riavviare il count

altrimenti consigliano

Citazione
delete from sqlite_sequence where name='your_table';

spero di averti aiutato
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Distruggere Database
« Risposta #4 il: 17 Novembre 2010, 14:48:59 CET »
0
Grazie mille a tutti. Ora cerco di sistemare il tutto e poi vi faccio sapere.
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Distruggere Database
« Risposta #5 il: 17 Novembre 2010, 15:44:31 CET »
0
Allora, per quanto riguarda il comando

adb shell
rm /data/data/il.tuo.package/databases/*

l'ho fatto, cancella tutto e tramite il comando sqlite3 vedo che nn esiste piu' ne lo schema ne la tabella. Il problema e' che provando a riusare lo stesso nome per il db nn funziona piu'. Nelle righe di log mi scrive che nn puo' scrivere su una porzione di memoria read only o qualcosa del genere.
Ha risolto cambiando il nome del db.
Per il resto ho usato la funzione deleteDatabase() di android.context, che fa' al caso mio. Quando cancello tutte le voci azzera anche il valore _id. L'unica cosa che nn mi torna e' che lo schema del db rimane intatto, mentre mi era sembrato di capire dalle specifiche che invece dovrebbe cancellare tutto...
Cmq ora torna quello che avrei voluto. Grazie ancora a tutti
Risparmia l'acqua, bevi birra...

Offline alex389

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    android 2.2
Re:Distruggere Database
« Risposta #6 il: 17 Novembre 2010, 15:57:14 CET »
0
Non potevi usare CREATE_IF_NECESSARY ? da quanto ho capito server per controllare se già esiste un db, se esiste non dovrebbe creare niente e puoi proseguire già con le query !

Se ho detto cavolate, Sorry !!!  ???

Ciauz !!

Alex

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Distruggere Database
« Risposta #7 il: 17 Novembre 2010, 16:00:09 CET »
0
secondo me non ha senso cancellare il database, cancelli i dati e riazzeri l'autoincrement.... è piu semplice e corretto in base a quello che vuoi.
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Distruggere Database
« Risposta #8 il: 17 Novembre 2010, 16:07:21 CET »
0
Per quanto riguarda il CREATE_IF_NECESSARY lo faccio gia'. La deleteDatabase() invece fa' proprio questo: cancella tutte le voci e azzera il valore autoincrement, che poi e' la cosa che ha senso. Mi era stata consigliata questa per distruggere completamente il db, ma nn fa' quello. In realta' fa' proprio quello che serve a me. Grazie a tutti!
« Ultima modifica: 17 Novembre 2010, 16:09:57 CET da Agosteeno »
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Distruggere Database
« Risposta #9 il: 18 Novembre 2010, 15:50:54 CET »
0
no ragazzi, scusate ho detto una minchiata! la delete() cancella tutto il database, avevo visto male io ieri...
Risparmia l'acqua, bevi birra...

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re: Distruggere Database
« Risposta #10 il: 18 Novembre 2010, 16:05:27 CET »
0
Prova il metodo che ti ho detto

Sent from my HTC Hero using Tapatalk
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Distruggere Database
« Risposta #11 il: 19 Novembre 2010, 09:49:06 CET »
0
Si, sto facendo cosi'. Solo che nn riesco a riportare a zero il valore di autoincrement. La prima risposta della pagina che hai linkato dice cosi': Explicitly insert the value-1 into the table, then delete the row, ma nn capisco cosa intenda.
Per quanto riguarda il consiglio che hai evidenziato tu non ho capito bene cosa fare. Io provo con questo codice
Codice (Java): [Seleziona]
myDB.delete("table", null, null);
String inserisci = "table into voto (_id) values ('0')";
myDB.execSQL(inserisci);

solo che cosi' nn funziona. L'unica cosa che fa' e' aggiungere un record con _id 0 e gli altri valori null. Il fatto e' che se poi vado ad aggiungere nuovi dati con insert il count su _id continua ad avanzare da dove era prima!
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Distruggere Database
« Risposta #12 il: 19 Novembre 2010, 09:55:23 CET »
0
Ok, ho provato con l'ultimo consiglio che c'era nella tua risposta, che in questo momento nn avevo visto. Ora il codice che ho scritto e' questo:
Codice (Java): [Seleziona]
myDB.delete("table", null, null);
String cancella = "delete from sqlite_sequence where name='table'";
myDB.execSQL(cancella);

e fa' esattamente quello che voglio. Grazie mille per l'aiuto
Risparmia l'acqua, bevi birra...

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Distruggere Database
« Risposta #13 il: 19 Novembre 2010, 10:45:36 CET »
0
Ok, ho provato con l'ultimo consiglio che c'era nella tua risposta, che in questo momento nn avevo visto. Ora il codice che ho scritto e' questo:
Codice (Java): [Seleziona]
myDB.delete("table", null, null);
String cancella = "delete from sqlite_sequence where name='table'";
myDB.execSQL(cancella);

e fa' esattamente quello che voglio. Grazie mille per l'aiuto
;-)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia