2011-12-28 51 views
4

我有一堆sqlite數據庫在我的應用程序中浮動(不要問),我需要能夠獲取dbs的文件位置。有什麼辦法通過使用sqlite3對象來做到這一點? (也就是說,創建數據庫時不需要在db旁邊存儲路徑)有沒有辦法從sqlite3對象中獲取數據庫位置?

Bonus問題:如果有多個數據庫連接到sqlite3對象,我如何獲取其他數據庫(它們是ATTACHed) ?

謝謝!

回答

0

sqlite3應該是不透明的結構,但檢查SQLite頭,也許你會發現一些未公開的字段那裏包含數據庫的路徑。

即使你發現這樣的領域,使用它是一個壞主意,遲早會導致維護問題。

爲什麼你需要保持與數據庫一起的路徑,首先?

+0

有很多原因:1.它允許我在其他地方移動數據庫2.我可以檢查我沒有重新打開同一個數據庫兩次3.我可以檢查一個數據庫,我可能會覆蓋(當移動另一個數據庫時)未打開等。 – chacham15 2011-12-28 19:21:15

+0

爲什麼不創建類似於ConnectionPool的東西呢?一個允許將路徑傳遞到數據庫並獲取句柄的單例。在內部,該對象可以將路徑和句柄之間的映射存儲在地圖中。這樣所有的邏輯將被封裝在一個地方,你不會依賴sqlite3內部。 – 2011-12-28 19:35:13

+0

它增加了額外的複雜性,我希望是不必要的。顯然這將是如果sqlite本身不提供方法的方式,但我希望他們做到了。 – chacham15 2011-12-28 21:52:32

0

使用Filemon/processmon要監視的文件正在由您的應用程序/進程訪問。你會找到你的SQLite文件。

相關問題