Я использую SQLite. Мне просто интересно, как и когда выполнить статус PRAGMA в sqlite.
Например, я хочу выполнить:
PRAGMA schema.journal_mode = OFF;
Основываясь на документе в https://www.sqlite.org/pragma.html#pragma_journal_mode, я думаю, мне следует выполнить его после sqlite3_open () и перед созданием любых таблиц. Поэтому я просто вызываю sqlite3_prepare_v2 () и sqlite3_step () для выполнения вышеуказанной PRAGMA, чтобы повысить производительность операций с базой данных. Однако после заявления PRAGMA кажется, что ничего не изменилось, и производительность не улучшилась.
В таком случае, как я могу узнать, выполняется ли оператор PRAGMA и вступает ли он в силу?
Спасибо
На самом деле я вообще не использую схему, мое утверждение PRAGMA journal_mode = OFF;





Многие из Pragma будут возвращать установленное значение, кроме того, просто используя Pragma, без параметра будет возвращать текущее значение (в некоторых случаях только последний будет возвращать статус / текущее значение).
PRAGMA journal_mode = OFF вернет результат офф.
PRAGMA journal_mode вернет текущее значение, не влияя на него.
Так что просто действуйте так, как будто это запрос, имя столбца в наборе результатов во многих случаях будет таким же, как и прагма, в которой выполняется действие. Те, которые возвращают несколько столбцов, такие как database_list, будут возвращать столбцы, специфичные для прагмы.
например
PRAGMA journal_mode;
PRAGMA journal_mode = OFF;
PRAGMA journal_mode;
PRAGMA journal_mode = DELETE;
PRAGMA journal_mode;
приводит к: -
Спасибо. Есть ли другие способы проверить, выключен журнал или нет? Например, SQLite сохранит журнал в определенном каталоге с определенным именем, после чего я могу проверить наличие этого файла журнала, чтобы убедиться, что журнал отключен.
Ненадежно, потому что файл журнала не обязательно должен существовать, поскольку по умолчанию используется DELETE, поэтому его отсутствие не обязательно означает, что он отключен. Временные файлы, используемые SQLite (см. 2.1)
Когда я использую «PRAGMA synchronous = OFF;», оператор НЕ возвращает никакого результата. Как я могу узнать, что параметр установлен правильно?
Думаю, как "PRAGMA journal_mode = OFF;" и "PRAGMA synchronous = OFF;" должно выполняться после открытия базы данных и до создания таблиц, это правильно?
Используйте PRAGMA synchronous;, чтобы получить результаты. Обратите внимание, что результат является числовым, например 0 = Выключенный и т. д. В соответствии с документацией. Я не верю, что таблицы существуют или не имеют значения. скорее, никакие транзакции не должны быть незавершенными. Но лучше использовать как можно скорее после открытия соединения.
Я использую sqlite3_step для подготовленного оператора «PRAGMA synchronous = OFF;», но он возвращает SQLITE_DONE вместо SQLITE_ROW, что означает, что данные не возвращаются. Я также пробую его в оболочке sqlite3, но также ничего не возвращает.
@alancc прочитайте комментарий, например. sql = "PRAGMA synchronous;"; rc = sqlite3_exec(db,sql,callback,0,&zErrMsg); приводит к синхронный = 2 (т.е. значения в столбце синхронный равны 2, что соответствует НОРМАЛЬНОМУ (в данном случае)). В отличие от sql = "PRAGMA synchronous = OFF;"; rc = sqlite3_exec(db,sql,callback,0,&zErrMsg);, который не возвращает столбец результата синхронно. Отметьте этот вопрос как ответ.
Большое тебе спасибо. Я понял.
В принципе, лучше всего попробовать без каких-либо параметров / значений / настроек запросить статус / значение и предоставить только параметр / значение / настройку при изменении (хотя не уверен, что правило является 100% пуленепробиваемым).
Вы используете буквальное слово «схема»? Это должно быть «main» или имя другой присоединенной базы данных (или просто не указывать его).