1

我想查询存储在只读文件系统上的 SQLite 数据库。该PRAGMA语句应该完全这样做:

sqlite3_stmt* pVM;
sqlite3* mpDB;

sqlite3_open_v2(szFile, &mpDB, SQLITE_OPEN_READONLY, 0);   // SQLITE_OK

sqlite3_exec(mpDB, "PRAGMA journal_mode = OFF;", NULL, 0, 0);

sqlite3_prepare_v2(mpDB, "SELECT samplevalue FROM table;", 1, &pVM, 0); // SQLITE_OK
if (sqlite3_step(pVM) == SQLITE_ROW)
{
    // Get value
    printf("Value: %d", sqlite3_column_int(pVM, 0)); // OK but journal is still 
                                                     // created on disk
}

sqlite3_finalize(pVM);  // SQLITE_OK

我的第二个猜测是该PRAGMA语句可能是每个查询语句的一部分:

sqlite3_prepare_v2(mpDB, "PRAGMA journal_mode = MEMORY; SELECT samplevalue FROM table;", 1, &pVM, 0); // SQLITE_OK
if (sqlite3_step(pVM) == SQLITE_ROW)
{
    // Get value
    printf("Value: %d", sqlite3_column_int(pVM, 0)); // Value "0" is returned
}

这不起作用,因为只PRAGMA执行了部分。

如何在 SQLite 不尝试创建日志的情况下执行查询?

问候,

4

0 回答 0