0

我正在编写一个需要数据库的 c++ 程序,并且我正在使用 SQLite。我有一个函数,createTables()它在我的数据库中创建表。但是程序中真正困扰我的部分是createTables()每次程序启动时我都必须调用。尽管用于创建表的 SQL 查询是这样的:

CREATE TABLE IF NOT EXISTS table_name

但我想知道是否可以在不使用if或其他条件语句的情况下只运行一部分代码。我可以自行更改程序工作流程吗?程序可以改变自己吗?
例如假设原始代码是:

createTables();
otherPartOfProgram();

但是下一次(假设表在之前的运行中成功创建)程序改变了自己,工作流程是这样的:

otherPartOfProgram();
4

2 回答 2

3

那是不能直接做的。您可以在程序(配置文件、注册表...)之外存储表已创建的事实,或者更改createTables函数以便在尝试创建它们之前测试它们是否存在。

不过,更简单的方法是将表格作为运行程序的先决条件。让一些外部代码创建它们。

于 2013-02-21T18:12:39.293 回答
2

标准库有一个解决方案,尽管它不是为您的情况设计的:

#include <mutex>

std::once_flag flag;
void f();             // to be called once

void main_function()
{
    std::call_once(flag, f);
    // ...
}
于 2013-02-21T18:23:17.107 回答