我正在尝试使用C++的Sqlite3库以编程方式在C++中执行VACUUM命令。请参阅C-language Interface Specification for SQLite上的引用。

有人可以提供如何执行此操作的代码段吗?我尝试调用它,但它给出了一个异常(exception):

这段代码在我的SqliteDb.cpp帮助器类中。

void SqliteDb::executeSql(const string& sqlStatement) {
  char* errMsg = NULL;
  sqlite3_exec(db, sqlStatement.c_str(), NULL, NULL, &errMsg);
  if (errMsg != NULL) {
    string reason = string("Error in") + sqlStatement + " " + errMsg;
    sqlite3_free(errMsg);
    __throw_sqlitedb(reason);
  }
}

在我的主要类(class)中,我做到了:
try{
    db = new SqliteDb(filepath);
    db->executeSql("VACUUM;");
} catch (std::exception e) {
    printf("EXCEPTION occurred %s", e.what());
}

输出是
EXCEPTION occurred std::exception

SqliteDb.cpp是一个经过测试的类,适用于使用该类的其他组件。

最佳答案

您可以使用来自sqlite3的sqlite3_exec()API。
sqlite3_exec(db, "VACUUM", 0, 0, 0);

07-28 02:30