2011-09-19 72 views
1

我正在使用JDBC驅動程序與SQlite連接。我想從SQLite命令提示符中檢查在數據庫引擎中打開了多少個連接。任何人都可以告訴我我該怎麼做?Sqlite連接列表

+0

你使用zentus SQLiteJDBC嗎? http://www.zentus.com/sqlitejdbc/ – Robert

回答

0

java.sql包中沒有API可以做到這一點。您必須在您身邊這樣做,例如使用Singleton類來讓您創建連接並跟蹤此類創建連接的數量。

PS:當然,這隻能算在底層運行的JVM實例

+0

謝謝您的回覆。但我想知道如何使用sqlite3從命令提示符chk連接的數量 – newCommer

1

SQLite連接數是embedded database - 訪問數據庫文件基本上都有自己的數據庫引擎的每個過程。獨立引擎之間的唯一交互是通過底層操作系統的文件鎖定工具,這可以確保在嘗試更新數據庫文件時,各種進程不會互相踩在一起。

由於這個設計,就SQLite而言,沒有單一的控制點。 sqlite3 shell實用程序本質上包含SQLite數據庫引擎本身的副本,這就是它如何處理DB文件 - 它不會「連接」到另一個應用程序。事實上,SQLite文檔中的術語「連接」只是由於其對數據庫工程師的熟悉而被錯誤地使用,實際上它只不過是打開一兩個文件而已。

因此,sqlite3實用程序無法知道任何其他應用程序正在做什麼,除了偶爾遇到另一個進程正在修改數據庫時鎖定的文件。

如果您想知道您的應用程序在底層數據庫中所做的工作,您必須在基本SQLite3庫中查找/編寫一個包裝,以執行您所需的任何其他簿記 - 可能會提供一個控制界面。基本SQLite庫本身沒有任何這樣的設施,因爲它們被認爲超出了它的範圍。

包裝方法的問題是,您的應用程序仍然不知道任何其他進程正在做什麼。您可能可以讓所有使用包裝程序的進程在中央訪問點(文件/網絡服務/ ...)收集數據,但僅此而已 - 任何其他進程(例如sqlite3 shell)仍然可以訪問數據庫直接文件。

但是,如果您只需知道數據庫文件的「連接」數量,則可能存在(絕對不可移植的)方式:每個「連接」都會導致數據庫文件被打開,因此您可能能夠使用特定於平臺的實用程序來查明哪些進程在每個時刻都打開了該文件。例如,在Linux上,您可以使用lsof實用程序。順便說一下,如果您從應用程序的單個實例中多次打開同一個DB文件,則可能需要重新考慮您的體系結構 - 與傳統的DB服務器相反,打開多個「連接」到單個SQLite數據庫文件沒有性能優勢,甚至可能導致應用程序死鎖,如果你不小心。