0

私はデータベースを必要とするC++プログラムを書いていて、SQLiteを使用しています。createTables()データベース内にテーブルを作成する関数、があります。しかし、プログラムの中で本当に気になるのはcreateTables()、プログラムが開始するたびに電話をかけなければならないことです。テーブルを作成するためのSQLクエリは次のようなものですが:

CREATE TABLE IF NOT EXISTS table_name

しかし、他の条件文を使用せずifに、コードの一部を1回だけ実行できるかどうかを知りたいです。プログラムのワークフローを単独で変更できますか?プログラム自体を変更できますか?
たとえば、元のコードが次のようになっているとします。

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 に答える