Ошибка SQLITE_CANTOPEN при открытии БД в режиме READONLY - PullRequest
1 голос
/ 06 февраля 2020

Я хочу открыть базу данных как READONLY:

exit = sqlite3_open_v2( "database.db?immutable=1" , &db_ , SQLITE_OPEN_READONLY | SQLITE_OPEN_URI , nullptr );

, но я получаю сообщение об ошибке: SQLITE_CANTOPEN, есть идеи, почему?

Если я открою ее так, открытие будет успешным:

exit = sqlite3_open( "database.db" , &db_ );

1 Ответ

1 голос
/ 06 февраля 2020

При использовании SQLITE_OPEN_URI «имя файла можно интерпретировать как URI». Однако для того, чтобы он обрабатывался как URI, к нему должен быть добавлен префикс file:, иначе он будет обрабатываться как обычное имя файла.

Итак, вы пытаетесь открыть файл с именем database.db?immutable=1, который очевидно не существует. Обратите внимание, что при SQLITE_OPEN_READONLY «если база данных еще не существует, возвращается ошибка». Поэтому самое простое решение - просто сделать строку file:database.db?immutable=1.

Однако я предлагаю вам придерживаться только одного метода предоставления специальных опций; используйте флаг SQLITE_OPEN_URI и поместите все остальные параметры в URI, например: file:database.db?mode=ro&immutable=1.

(я понимаю, что не все комбинации параметров возможны при использовании только одного метода, но в вашем в таком случае я говорю «придерживайтесь одного», и вам не нужно беспокоиться о взаимодействии различных методов).

SQLite имеет обширную документацию, и вы можете прочитать все об открытии баз данных здесь .

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