我有一堆sqlite數據庫在我的應用程序中浮動(不要問),我需要能夠獲取dbs的文件位置。有什麼辦法通過使用sqlite3對象來做到這一點? (也就是說,創建數據庫時不需要在db旁邊存儲路徑)有沒有辦法從sqlite3對象中獲取數據庫位置?
Bonus問題:如果有多個數據庫連接到sqlite3對象,我如何獲取其他數據庫(它們是ATTACHed) ?
謝謝!
我有一堆sqlite數據庫在我的應用程序中浮動(不要問),我需要能夠獲取dbs的文件位置。有什麼辦法通過使用sqlite3對象來做到這一點? (也就是說,創建數據庫時不需要在db旁邊存儲路徑)有沒有辦法從sqlite3對象中獲取數據庫位置?
Bonus問題:如果有多個數據庫連接到sqlite3對象,我如何獲取其他數據庫(它們是ATTACHed) ?
謝謝!
API函數:sqlite3_db_filename
sqlite3應該是不透明的結構,但檢查SQLite頭,也許你會發現一些未公開的字段那裏包含數據庫的路徑。
即使你發現這樣的領域,使用它是一個壞主意,遲早會導致維護問題。
爲什麼你需要保持與數據庫一起的路徑,首先?
使用Filemon/processmon要監視的文件正在由您的應用程序/進程訪問。你會找到你的SQLite文件。
有很多原因:1.它允許我在其他地方移動數據庫2.我可以檢查我沒有重新打開同一個數據庫兩次3.我可以檢查一個數據庫,我可能會覆蓋(當移動另一個數據庫時)未打開等。 – chacham15 2011-12-28 19:21:15
爲什麼不創建類似於ConnectionPool的東西呢?一個允許將路徑傳遞到數據庫並獲取句柄的單例。在內部,該對象可以將路徑和句柄之間的映射存儲在地圖中。這樣所有的邏輯將被封裝在一個地方,你不會依賴sqlite3內部。 – 2011-12-28 19:35:13
它增加了額外的複雜性,我希望是不必要的。顯然這將是如果sqlite本身不提供方法的方式,但我希望他們做到了。 – chacham15 2011-12-28 21:52:32