2011-12-28 5 views
4

私はsqlite dbの束を私のアプリケーション(dont ask)に浮かべています。私はdbsのファイルの場所を取得できる必要があります。 sqlite3オブジェクトを使ってこれを行う方法はありますか? (dbが作成されたときにdbの横にパスを保存する必要はありません)sqlite3オブジェクトからデータベースの場所を取得する方法はありますか?

ボーナス質問:sqlite3オブジェクトに複数のdbが接続されている場合、どのように他のものも取得します(ATTACHされました) ?

ありがとうございます!

答えて

4

API機能:あなたのアプリ/プロセスによってアクセスされているファイルを監視するためのsqlite3_db_filename

0

sqlite3は不透明な構造ですが、SQLiteヘッダーをチェックしていますが、そこにはデータベースへのパスを含むいくつかの文書化されていないフィールドがあります。

このようなフィールドが見つかったとしても、それを使用するのは悪い考えであり、遅かれ早かれメンテナンスの問題につながります。

なぜ、ハンドルと一緒にデータベースへのパスを保持する必要がありますか?

+0

1.データベースを別の場所に移動することができます2.同じデータベースを2回開いていないことを確認できます3.上書きしている可能性があるデータベースを確認できます(別のデータベース)isnt openなど – chacham15

+0

ConnectionPoolのようなものを作成しないのはなぜですか?データベースにパスを渡してハンドルを戻すことを可能にするシングルトン。内部的には、そのオブジェクトはパスとハンドルの間のマッピングをマップに格納できます。このようにして、すべてのロジックが1つの場所にカプセル化され、sqlite3の内部構造に頼ることはありません。 –

+0

私は不要であると思われていた余分なレイヤーを追加します。明らかに、これはsqlite自体がメソッドを提供していない場合に行う方法ですが、私はそれらができたことを期待していました。 – chacham15

0

利用のFilemon/processmon。 SQLiteファイルが見つかります。

関連する問題