Posts Tagged ‘ Calabria

Shutdown HSQLDB

Ultimamente sto usando Hypersonic SQL DB in un software che sto scrivendo. Il driver utilizzato è “embedded” ovvero non è presente un server in attesa di ricevere comandi SQL, ma il database è un file gestito direttamente dal driver di hypersonic.

Con questo tipo di accesso però, avevo notato perdite di dati sul database, non tutto infatti diventava persistente e, certo di non aver scritto codice errato, iniziavo a pensare di non capirci più nulla.

Il fatto è che, a differenza di quanto ero solito fare con altri RDBMS, non è sufficiente chiudere una connessione con

connection.close()

al termine dell’esecuzione del programma, il driver effettua caching delle tabelle per ottimizzare gli accessi al file system e non tutte le modifiche vengono scritte sul file.

È necessario fornire al driver l’istruzione di “SHUTDOWN” di modo che tutti i dati eventualmente ancora in cache vengano correttamente resi persistenti:

Statement shutdown = connection.createStatement("SHUTDOWN");
shutdown.execute();
shutdown.close();
connection.close();

Esiste inoltre, una funzione di shutdown che effettua anche una riorganizzazione del database ed una compressione dei dati. Essendo un’operazione lenta è bene non usarla troppo di frequente, il criterio d’uso è lo stesso di “SHUTDOWN”, “SHUTDOWN COMPACT”.

Alla prossima :)