2011-12-28 3 views
4

У меня есть куча sqlite db, плавающая вокруг в моем приложении (не спрашивайте), и мне нужно иметь возможность получить местоположение файла dbs. Есть ли способ сделать это, используя объект sqlite3? (Т. Е. Не нужно было сохранять путь вдоль db, когда был создан db)Есть ли способ получить местоположение базы данных из объекта sqlite3?

Бонус Вопрос: Если к объекту sqlite3 добавлено более одного db, как мне получить остальные (они были ATTACHed) ?

Спасибо!

ответ

0

sqlite3 должен быть непрозрачным, но проверить заголовки SQLite, возможно, вы найдете там некоторые недокументированные поля, содержащие путь к базе данных.

Даже если вы найдете такое поле, использовать его плохую идею и рано или поздно приведет к проблемам обслуживания.

Зачем вам нужно сохранять путь к базе данных вместе с дескриптором, в первую очередь?

+0

Существует много причин: 1. Это позволяет мне перемещать базу данных в другом месте. 2. Я могу проверить, что я дважды не открываю одну и ту же базу данных. 3. Я могу проверить, что база данных, которую я могу переопределить (при перемещении другой базы данных) isnt open и т. д. – chacham15

+0

Почему бы не создать что-то вроде ConnectionPool? Синглтон, который позволяет пройти путь к базе данных и вернуть дескриптор. Внутренне этот объект мог хранить сопоставление между контуром и дескриптором на карте. Таким образом, вся логика будет инкапсулирована в одном месте, и вы не будете полагаться на внутренние элементы sqlite3. –

+0

Он добавляет дополнительный уровень сложности, который я надеялся, не нужен. Очевидно, это будет способ сделать это, если сам sqlite не предоставляет метод, но я надеялся, что они это сделали. – chacham15

0

Использование Филемон/processmon контролировать, какие файлы доступны для вашего приложения/процесса. Вы найдете свой файл SQLite.