Mam aplikację jednowątkową, która korzysta z 3 baz danych SQLite w 3 różnych plikach w lokalnym systemie plików.Dlaczego otrzymuję SQLException: baza danych jest zablokowana w mojej bazie danych SQLite JDBC?
Stworzyłem klasę DbAdapter
pomocnika, który otwiera połączenie do pliku bazy danych SQLite. W tej klasie mam metodę open
, która tworzy połączenie i metodę close
, która uwalnia wszystko.
W 3 bazy danych są dostępne z klasy pochodnej DbAdapter
.
W moim programie każdy dostęp do bazy danych wygląda następująco:
MyDbAdapter DB = new MyDBAdapter();
int stuff = DB.getStuff(); // queries the database
DB.close();
// now do something with `stuff`
mam rejestrowane stdout
wszystkie połączenia DbAdapter.open
i DbAdapter.close
. Za każdym razem jest blisko open()
, a close()
.
ja również wziąć starań, aby zamknąć wszystkie moje Statement
s (co spowoduje związane ResultSet
s zostać zamknięte aswell).
Więc myślę, że moje dostępy baz danych są czyste, ponieważ staram się je jak najkrótsze, a ja zwolnić wszystkie zasoby, jak tylko już ich nie potrzebują.
Jednak nadal jestem coraz java.sql.SQLException: database is locked
.
Czy jest coś, czego nie robię właściwie? Wiem, że nie pokazałem żadnego kodu, ale musiałbym wysłać DUŻĄ ilość kodu i nie będzie to miało znaczenia. Pytam tylko, czy używam tutaj najlepszych praktyk, ponieważ myślę, że mam i wciąż dostaję wyjątki.
To z Java 1.6, Xerial.org za sqlite-JDBC-3.7.2 kierowca, na Mac OS 10.6 x64
Czy stary proces aplikacji działa nadal? Czy to nadal przychodzi po ponownym uruchomieniu? Ponieważ o ile wiem, jest to jeden proces na wbudowany db nie jeden wątek ... – Thihara
możliwy duplikat [java.sql.SQLException: baza zablokowana] (http://stackoverflow.com/questions/2578623/java-sql- sqlexception-database-locked) –
@ Thihara: Mam 'kill -9''d wszystkie procesy java, wciąż –