事情是这样的,就是写了点sqlite3的代码,包括create table和drop table
例如
void dropTabele(sqlite3 *db_handler, sqlite3_stmt* stmt, const std::string& table_name)
{
std::string drop_sql = "DROP TABLE IF EXISTS " + table_name;
int drop_tatus = sqlite3_prepare_v2(db_handler, drop_sql.c_str(), -1, &stmt, nullptr);
if (drop_tatus != SQLITE_OK) {
log.....
} else {
drop_tatus = sqlite3_step(stmt);
if (drop_tatus != SQLITE_DONE) {
log....
}
}
sqlite3_reset(stmt);
}
本想着在外层定义sqlite3_stmt指针,然后传给dropTable,然后内部调用sqlite3_reset重置,外层再调用sqlite3_finalize释放。但是sqlite3_finalize会崩溃。
后来发现sqlite3_prepare_open和sqlite3_finalize是一一对应的。
需要改成
void dropTabele(sqlite3 *db_handler, const std::string& table_name)
{
sqlite3_stmt* stmt;
std::string drop_sql = "DROP TABLE IF EXISTS " + table_name;
int drop_tatus = sqlite3_prepare_v2(db_handler, drop_sql.c_str(), -1, &stmt, nullptr);
if (drop_tatus != SQLITE_OK) {
log.....
} else {
drop_tatus = sqlite3_step(stmt);
if (drop_tatus != SQLITE_DONE) {
log....
}
}
sqlite3_finalize(stmt);
}