Поэтому, когда я пытаюсь FlowManager.init(dbConfig)
с правильным паролем после первого ввода пароля для работы, он выдает исключение net.sqlcipher.database.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master;
, если я пытаюсь открыть, закрыть или выполнить любую операцию sql FlowManager.getConfig().closeDB
, FlowManager.getDatabase().isDatabaseIntegrityOk
. По этой нити
SQLCipher для Android не знает, что введенный вами пароль недействителен после вызова sqlite3_key, так как ключ базы данных не используется, пока не будет введена команда SQL для базы данных, следующей за sqlite3_key, например setLocale (.. .) метод, на который вы ссылаетесь выше. Проблема в том, что предоставление неверного ключа может быть только одним из возможных других сценариев, которые могут быть проблемой в момент выполнения первого оператора SQL. Поврежденный файл данных, неудачная проверка HMAC или открытие файла без базы данных могут привести к тому же сообщению об ошибке. Для подробного описания этого, пожалуйста, просмотрите эту тему. Было бы лучше перехватить исключение при попытке открыть базу данных и соответственно обработать ее в клиентском приложении.
если я не могу выполнить какой-либо оператор sql после инициализации базы данных с неверным паролем, что мне следует сделать, чтобы снова получить доступ?