【发布时间】:2017-10-13 23:59:39
【问题描述】:
我正在尝试使用 C++ 的 Sqlite3 库以编程方式在 C++ 中执行 VACUUM 命令。请参阅C-language Interface Specification for SQLite 处的参考资料。
有人可以提供如何执行此操作的代码 sn-p 吗?我尝试调用它,但它给出了一个异常:
此代码在我的 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);
}
}
在我的主要课程中我做了:
try{
db = new SqliteDb(filepath);
db->executeSql("VACUUM;");
} catch (std::exception e) {
printf("EXCEPTION occurred %s", e.what());
}
输出是
EXCEPTION occurred std::exception
SqliteDb.cpp 是一个经过测试的类,适用于使用该类的其他组件。
【问题讨论】:
-
考虑添加minimal reproducible example,并包含错误!
-
添加了一些示例代码。
-
VACUUM;在 SQLite 3.22.0 中为我工作。也许filepath是错误的。也许你应该string reason = ...;然后throw std::runtime_error(reason.c_str())。它应该能让你捕捉到一些有意义的东西。另见How to create a Minimal, Complete, and Verifiable example。