我有一個單線程應用程序,它在本地文件系統上的3個不同文件中使用3個SQLite數據庫。爲什麼我會得到SQLException:數據庫被鎖定在我的JDBC SQLite數據庫上?
我創建了一個DbAdapter
幫助程序類,它打開與SQLite數據庫文件的連接。在這個類中,我有一個創建連接的方法open
,和一個釋放所有內容的方法close
。
這3個數據庫是從派生出DbAdapter
的類訪問的。
在我的程序中的每個數據庫的訪問是這樣的:
MyDbAdapter DB = new MyDBAdapter();
int stuff = DB.getStuff(); // queries the database
DB.close();
// now do something with `stuff`
我已經登錄到stdout
到和DbAdapter.close
所有通話。每當有一個open()
,一個close()
緊隨其後。
我也小心關閉我所有的Statement
(這將導致關聯的ResultSet
也被關閉)。
所以我想我的數據庫訪問是乾淨的,因爲我試圖讓他們儘可能短,並且我在不再需要它們時立即釋放所有資源。
然而,我仍然得到java.sql.SQLException: database is locked
。
有沒有什麼我不正確的做法?我知道我沒有顯示任何代碼,但是我不得不發佈很多代碼,它不會相關。我只是問我是否在這裏使用最佳實踐,因爲我認爲我這樣做,而且我仍然遇到例外情況。
這是與Java 1.6,Xerial.org的sqlite的-JDBC-3.7.2驅動程序,在Mac OS 10.6的x64
可能是舊的應用程序正在運行嗎?重新啓動後這仍然會出現嗎?因爲據我所知這是每個嵌入式數據庫的一個進程不是一個線程.... – Thihara
可能重複[java.sql.SQLException:數據庫鎖定](http://stackoverflow.com/questions/2578623/java-sql- sqlexception-database-locked) –
@Thihara:我已經'kill'了所有的java進程,仍然 –