Italian Ripristino database sqlite [RISOLTO]

moore_it

Well-Known Member
Licensed User
Longtime User
Ciao a tutti,
mi chiedevo se fosse possibile all'interno dell'app che lo sta usando chiudere un db sqlite, cancellare il file che ha generato e il suo jurnal, sostituirlo con uno nuovo e riaprire il db.
Grazie
 

LucaMs

Expert
Licensed User
Longtime User
Con domande costruite in quel modo rischi che @Star-Dust ti risponda:

SI

?

[Peggio; visto che lo chiedi a te stesso, non c'è motivo di risponderti ? ]


Che problema c'è? Se il DB è chiuso (non ci sono cursori aperti), semplicemente elimini i file e fai ciò che hai scritto.
 

moore_it

Well-Known Member
Licensed User
Longtime User
il fatto è che nel momento in cui vado a riaprirlo con un initialize mi dà questo errore

java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase:
 

LucaMs

Expert
Licensed User
Longtime User
il fatto è che nel momento in cui vado a riaprirlo con un initialize mi dà questo errore

java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase:
Perché, come detto e come indica il messaggio, il db è aperto.
Controlla di aver chiuso tutti i cursori e usato SQL1.Close (ovviamente col nome del tuo DB)
 

moore_it

Well-Known Member
Licensed User
Longtime User
il messaggio direbbe tentativo di riaprire un oggetto chiuso

infatti prima di cancellare il file chiudo il database db.close() e poi provo a riaprirlo ma nulla quindi mi chiedevo se questa procedura è possibile ma se tu dici di si di sicuro un modo ci sarà

Grazie
 

Star-Dust

Expert
Licensed User
Longtime User
Hai chiuso il cursore?
Sembra che effettui un operazione a database chiuso.

La sequenza potrebbe essere
  1. Chiudere cursori e database
  2. Cancellate file
  3. (Eventualmente ricreare file)
  4. Aprire/Inizializzare DB. (Se non hai ricreato il file DB allora inizializzare con l'opzione CreateIfNecessary a true e poi creare le tabelle con i comandi)
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Progettino di prova.

Note:

1 - pur essendo B4XPages è per B4A (non ci sono istruzioni per B4J o B4I, ovviamente)
2 - ho usato Cursor ma è meglio usare ResultSet (in generale, non per il caso specifico)
 

Attachments

  • OpenDB.zip
    15.2 KB · Views: 173

moore_it

Well-Known Member
Licensed User
Longtime User
a quanto vedo usi i sql.cursor io uso la libreria DBUTILS che sia questo il problema ?
 

moore_it

Well-Known Member
Licensed User
Longtime User
no dbutils non ha questa possibilità ma chiede di passare un oggetto SQL che ha la possibilità di chiudere.
unica cosa secondo me dbutils potrebbe non chiudere i cursori e quindi lasciarli aperti
 

LucaMs

Expert
Licensed User
Longtime User
no dbutils non ha questa possibilità ma chiede di passare un oggetto SQL che ha la possibilità di chiudere.
unica cosa secondo me dbutils potrebbe non chiudere i cursori e quindi lasciarli aperti
Ho provato. Ho usato B4XDBUtils ma non cambierebbe con DBUtils.
Non c'è problema (benché non mi piaccia affatto), basta chiudere il db.
 

Attachments

  • OpenDBDBUtils.zip
    15.3 KB · Views: 160

moore_it

Well-Known Member
Licensed User
Longtime User
Vogliate scusare la mia stupididà, tutto funziona a meraviglia ma chiaramente quando si usano nomi di database diversi le cose non possono che dare problemi.
Fortuna che mi sono accorto altrimenti vi avrei tediato ancora.

Mi scuso e vi ringrazio per la vostra sempre preziosa disponibilità.
 

amorosik

Expert
Licensed User
Vogliate scusare la mia stupididà, tutto funziona a meraviglia ma chiaramente quando si usano nomi di database diversi le cose non possono che dare problemi.
Fortuna che mi sono accorto altrimenti vi avrei tediato ancora.

Mi scuso e vi ringrazio per la vostra sempre preziosa disponibilità.

Di niente
Quando vuoi chiedi pure a LucaMs e StarDust
Saranno felici di aiutarti

???
 
Top